c++ - 确定不必要地链接了哪些静态库

标签 c++ linux gcc

我想减少库对我正在使用 GCC 为 Linux 编译的某些 C++ 可执行文件的依赖性。有一个大概有 40 个链接的静态库的列表。我想确定哪些是不必要的,我不想一次删除一个来找出答案。

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(Ubuntu 的 GNU Binutils)2.25.1 的输出进行了测试。

关于c++ - 确定不必要地链接了哪些静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970111/

相关文章:

linux - linux/unix 中的 spawn、expect 和 send 命令是什么

c - 哪些 gcc 选项减少了代码大小?

gcc - 为什么链接库的顺序有时会导致 GCC 出错?

c++ - 为什么运行使用 gcc 和 clang 编译的程序时输出不同

python - Python 中的反修饰导出函数

c++ - 如何在自己的函数中最好地处理 Mat 中的不同数字格式

linux - 需要在linux中将制表符分隔的文本拆分为多个变量

c++ - (Swig to python)导入错误:dynamic module does not define init function

c++ - Valgrind 在 unittest-cpp 库中显示内存泄漏

c - GDB 在 PLT 部分显示不正确的跳转地址