gcc 链接器获取未使用对象的列表

fra*_*z86 5 c c++ linker gcc

我想在具有许多库的大型 C 应用程序中识别未使用的目标文件。该项目随着时间的推移发展了很多,现在我想搜索不再使用的库,以便我可以从依赖文件中删除它们。gcc 链接器是否可以识别任何未使用的对象?

例如,如果我用 gcc 编译一个应用程序,并且假设没有使用 library2 的任何符号/函数。有没有办法获取有关哪些对象未链接的信息?

gcc library1.o library2.o main.o -o main.elf
Run Code Online (Sandbox Code Playgroud)

我知道 gcc 有编译器和链接器标志来删除未使用的符号:

-fdata-sections -ffunction-sections -Wl,--gc-sections
Run Code Online (Sandbox Code Playgroud)

但是这样我不知道 gcc 删除了哪些对象。如果 gcc 可以选择获取未链接到应用程序的对象列表,那将是完美的。

只是提一下:我需要基于目标文件而不是基于函数/符号!

有谁知道 gcc 的这样一个选项?

tof*_*fro 1

看看呼叫捕捉器

这会将您的程序编译为程序集,并从程序集输出中提取明显的引用。我想这正是您正在寻找的。(请注意,由于它分析汇编程序输出,因此仅适用于 x86 平台)

注意callcatcher会忽略虚函数(出于某些充分的原因),因此它不会直接允许您分析这些函数。