【发布时间】:2020-02-18 01:50:06
【问题描述】:
我正在尝试在Ubuntu 的C++ 项目中使用Capstone 反汇编框架。 I ran the following command to install the development package:
sudo apt-get install libcapstone-dev
这在 /usr/include/capstone 中安装了包含,但是当我尝试使用 #include <capstone/capstone.h> 包含编译我的应用程序时,我收到链接器错误:
undefined reference to `cs_open'
undefined reference to `cs_disasm'
undefined reference to `cs_free'
undefined reference to `cs_close'
这些都是libcapstone.so中应该实现的功能。
确实,/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 不起作用,因为找不到包。
我是否需要安装任何其他软件包,或者可能有一些简单的CMake find_package() 用于Capstone?我发现的资源似乎没有使Capstone 设置用于链接它/将其包含在项目中足够简单。
编辑:libcapstone-dev包安装的文件有:
$ 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
【问题讨论】:
-
"确实,
/usr/lib文件夹中没有libcapstone.so。" - 嗯? Ubuntu包libcapstone-devcontains文件/usr/lib/libcapstone.so. -
@Tsyvarev:我添加了我的目录列表,
libcapstone.so实际上没有安装。我通过WSL使用Ubuntu 18.04.1。 -
奇怪,你有没有检查过实际上作为
libcapstone-dev包的一部分安装了什么?有关执行此操作的方法,请参阅 that question。 -
请注意,如果没有错误消息本身,“我得到一个链接器错误”并不是一个非常有用的描述......
-
嗯,
/usr/lib/x86_64-linux-gnu不是默认被链接器搜索到的吗?也就是说,target_link_libraries(project_name capstone)应该就足够了。