首页 > 解决方案 > 无法将可执行文件与 CMake 静态链接

问题描述

我正在尝试编译和链接一个静态可执行文件,以便它可以在不同的系统上运行,而无需对安装的不同库的版本等做出任何假设。

按照 CMake 文档,我将添加target_link_libraries(target -static)到我的 CMakeLists.txt 中。不幸的是,我看不到一种方法来探究这是否有任何影响。但是通过使用ldd executable. 我得到以下输出

    linux-vdso.so.1 (0x00007fffe29eb000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f54cbbb2000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f54cb829000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f54cb48b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f54cb09a000)
    /lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007f54cbdd1000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f54cae82000)

这告诉我可执行文件确实与动态库 (*.so) 链接。有人对进一步调查有什么建议吗?我真的发现这是 CMake 的缺点之一。在这一点上,该项目已经足够复杂,以至于从命令行进行编译和链接或制作 Makefile 系统确实需要很长时间。但我真的需要查看传递给 GCC 的实际标志,以了解为什么会发生这种情况。

有什么建议么?

标签: c++cmakestatic-linking

解决方案


推荐阅读