nm:如何在共享库中显示符号的目标文件?

时间:2012-11-13 17:10:37

标签: c linker shared-libraries elf objdump

我有25个目标文件,它们组合在一起形成一个共享库。我用gcc生成了共享库,当我在寻找带有 nm -D libmylib.so 的暴露符号时,我发现了两个名为 i 的不良外露符号, y ,位于.bss部分。我试图在我的源文件中找到它们但我无法找到它们,所以如果有人能告诉我是否有某种方法可以找到哪个.o文件确实有这些不受欢迎的暴露符号?我可以用nm做,还是需要其他工具?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

在包含目标文件的目录中,您可以运行:

find . -name '*.o' -exec nm -D {} \; -print

这应该打印符号,然后打印文件名

答案 1 :(得分:1)

链接共享库后,您无法再分辨哪个部分来自哪个目标文件。

您可以搜索构建库的单个对象:

find . -name '*.o' -print0 | xargs -0 nm -A | egrep ' (i|y)$'

您可以要求链接器告诉您何时定义它们:

$(CC) -fPIC -shared -o libmy.so $(OBJS) -Wl,-y,i,-y,y

如果您使用-g编译的对象构建库,您可以向GDB询问iy来自哪里:

gdb -q libmy.so
(gdb) info var ^i$
(gdb) info var ^y$