我正在尝试使用CMake构建静态二进制文件。
我环顾四周,发现了许多非描述性的解决方案(例如添加链接器标志“-static”),但我不确定如何测试它们。
我如何知道某个库(例如线程)是否已静态内置到我的二进制文件中?
答案 0 :(得分:3)
正如trenki所说,使用ldd
获取可执行文件所依赖的动态链接库列表,并检查它以确保您想要静态链接的代码不那里
您还可以使用nm
和strings
命令分别在可执行文件中转储程序化符号和人类可读文本。使用grep
过滤您在代码中引用的静态库中的标识符的输出,例如函数名称。
最后,您可以使用objdump
命令获取程序的反汇编列表。静态库函数应该出现在其中。
第一种方法,加上可编译,链接和运行良好的可执行文件,以演示静态库有助于提供的功能,这可能是一个充分的测试。仅当您想深入挖掘时才使用第二种或第三种方法。
答案 1 :(得分:1)
与CMake无关,但如果您在UNIX系统上,file
实用程序至少可以告诉您二进制文件是否使用共享库。
答案 2 :(得分:1)
在Linux下,您还可以使用ldd
命令显示您的二进制文件动态链接到哪些库。