【问题标题】:How to link against Capstone using CMake?如何使用 CMake 链接到 Capstone?
【发布时间】:2020-02-18 01:50:06
【问题描述】:

我正在尝试在UbuntuC++ 项目中使用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) 应该就足够了。

标签: c++ ubuntu cmake capstone


【解决方案1】:

Capstone 似乎提供了pkg-config .pc 文件。因此,以下应该有效:

include(FindPkgConfig)

pkg_check_modules (CAPSTONE REQUIRED capstone)

# Use CAPSTONE_FOUND, CAPSTONE_LIBRARIES, CAPSTONE_INCLUDE_DIRS vars
target_link_libraries(${PROJECT_NAME} ${CAPSTONE_LIBRARIES})

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2019-12-22
    • 2010-11-07
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2021-11-15
    • 2016-04-18
    相关资源
    最近更新 更多