[英]How to link against Capstone using CMake?
I'm trying to use the Capstone
disassembly framework in a C++
project on Ubuntu
.我正在尝试在
Ubuntu
的C++
项目中使用Capstone
反汇编框架。 I ran the following command to install the development package :我运行以下命令来安装开发 package :
sudo apt-get install libcapstone-dev
This installed the includes in /usr/include/capstone
but when I try to compile my application using the #include <capstone/capstone.h>
include, I get linker errors:这在
/usr/include/capstone
中安装了包含,但是当我尝试使用#include <capstone/capstone.h>
包含编译我的应用程序时,我收到 linker 错误:
undefined reference to `cs_open'
undefined reference to `cs_disasm'
undefined reference to `cs_free'
undefined reference to `cs_close'
These are all functions which should be implemented in the libcapstone.so
.这些都是应该在
libcapstone.so
中实现的功能。
Indeed, there is no libcapstone.so
in the /usr/lib
folder:实际上,
/usr/lib
文件夹中没有libcapstone.so
:
ubuntu@DESKTOP:/usr/lib$ ls
accountsservice emacsen-common libguestlib.so.0 networkd-dispatcher software-properties
apt environment.d libguestlib.so.0.0.0 open-vm-tools ssl
bfd-plugins file libhgfs.so.0 openssh sudo
binfmt-support gcc libhgfs.so.0.0.0 os-release sysctl.d
binfmt.d git-core libpsm1 pkg-config.multiarch systemd
byobu gnupg libvgauth.so.0 pkgconfig sysusers.d
clang gnupg2 libvgauth.so.0.0.0 pm-utils tar
cloud-init gold-ld libvmtools.so.0 policykit-1 tc
cnf-update-db groff libvmtools.so.0.0.0 python2.7 tmpfiles.d
command-not-found initcpio llvm-6.0 python3 ubuntu-release-upgrader
compat-ld initramfs-tools locale python3.6 update-notifier
dbus-1.0 kernel lxcfs python3.7 valgrind
debug klibc lxd rsyslog x86_64-linux-gnu
dpkg language-selector man-db sasl2
dracut libDeployPkg.so.0 mime sftp-server
eject libDeployPkg.so.0.0.0 modules-load.d snapd
sudo apt-get install libcapstone2
does not work since the package is not found. sudo apt-get install libcapstone2
不起作用,因为找不到 package。
Is there any other package I need to install or maybe there is some simple CMake
find_package()
for Capstone
?是否还有其他 package 我需要安装,或者可能有一些简单
CMake
find_package()
用于Capstone
? Resources I find do not seem to make the Capstone
setup for linking against it/including it in a project straightforward enough.我发现的资源似乎没有使
Capstone
设置用于链接它/将其包含在项目中足够简单。
EDIT:编辑:
The installed files by the libcapstone-dev
package are: libcapstone-dev
package安装的文件有:
$ dpkg-query -L libcapstone-dev
/.
/usr
/usr/include
/usr/include/capstone
/usr/include/capstone/arm.h
/usr/include/capstone/arm64.h
/usr/include/capstone/capstone.h
/usr/include/capstone/mips.h
/usr/include/capstone/platform.h
/usr/include/capstone/ppc.h
/usr/include/capstone/sparc.h
/usr/include/capstone/systemz.h
/usr/include/capstone/x86.h
/usr/include/capstone/xcore.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libcapstone.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/capstone.pc
/usr/share
/usr/share/doc
/usr/share/doc/libcapstone-dev
/usr/share/doc/libcapstone-dev/CREDITS.TXT
/usr/share/doc/libcapstone-dev/HACK.TXT
/usr/share/doc/libcapstone-dev/README
/usr/share/doc/libcapstone-dev/TODO
/usr/share/doc/libcapstone-dev/copyright
/usr/lib/x86_64-linux-gnu/libcapstone.so
/usr/share/doc/libcapstone-dev/changelog.Debian.gz
Capstone seems to provide pkg-config
.pc file. Capstone 似乎提供了
pkg-config
.pc 文件。 So, the following should work:因此,以下应该有效:
include(FindPkgConfig)
pkg_check_modules (CAPSTONE REQUIRED capstone)
# Use CAPSTONE_FOUND, CAPSTONE_LIBRARIES, CAPSTONE_INCLUDE_DIRS vars
target_link_libraries(${PROJECT_NAME} ${CAPSTONE_LIBRARIES})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.