确定不必要地链接了哪些静态库
Determining which static libraries are linked unnecessarily
我想减少对一些C++可执行文件的库依赖,我正在使用GCC为Linux编译。有一个链接的静态库的列表。我想确定哪些是不必要的,我宁愿不尝试一次删除它们来找出答案。
GCC 中是否有一个选项可以警告已链接但不解析任何符号的库?
是否有任何可用的 Linux 工具可以帮助我?
为了学习,我不关心未使用的代码被链接到可执行文件中。相反,我关心的是不必要的构建依赖项。我想缩短我的构建时间。
建立在@ThomasMatthews在对问题的评论中提供的信息的基础上:
使用-M
选项运行链接器,并将其输出通过管道传输到以下脚本:
get_used_libs
#!/bin/bash
sed -e '/^Discarded input sections$/,$ d'
-e '/^Archive member included to satisfy reference by file (symbol)$/ d'
-e '/^As-needed library included to satisfy reference by file (symbol)$/ d'
-e '/^Discarded input sections$/ d'
-e '/^$/ d; /^s/ d; s/s+.+//; s/(.+//'
| sort -u
它将返回程序链接所需的库列表。
免责声明:该脚本仅在玩具程序的GNU ld (GNU Binutils for Ubuntu) 2.25.1
输出上进行了测试。
虽然不像其他答案那么方便,但您可以使用nm
列出任何对象或存档所需的(U
)和导出(任何其他内容,但请注意[VvWw]
)符号。
使用 grep 和/或 sed 进行一些预处理可能会使它对某些用例更有帮助。
相关文章:
- 基于boost的程序的静态链接——zlib问题
- 使用gcc从静态链接的文件中查找可选符号
- 使用转换器提升 Python 问题 - 静态链接
- C++实用程序::转换在静态链接库中不起作用
- 将源中的 GLEW 与 cmake 静态链接
- 在发布模式下启动使用库的静态链接编译的应用程序时出错
- libavdevice 和 x11 的静态链接库应该以什么顺序链接?
- 静态链接启用 PIC 的库时出现链接器 PIC 错误
- 静态链接库时,收到链接器错误:找不到 -lgcc_s
- 静态链接 glibc & boost_python36 for Python extension
- 我可以在C++中配置静态链接吗?
- 协议缓冲区的静态链接会导致与现有符号冲突
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 静态链接 Visual Studio dll 到动态链接的 sfml 项目
- 我可以加载与库静态链接的 dll 吗?
- 静态链接MSVC库,动态链接Qt
- C++:找不到静态链接
- OpenSSL AES仅适用于某些计算机,即使具有静态链接也是如此
- CURL 静态链接未解析的外部符号
- 如何强制Windows.h在Visual Studio中静态链接而不是动态链接?