C nm:如何在共享库中显示符号的对象文件?
我有25个对象文件,它们被组合成一个共享库。我已经用gcc生成了共享库,当我在寻找带有nm-D libmylib的公开符号时,我在.bss部分找到了两个名为I和y的不受欢迎的公开符号。我试图在我的源文件中找到它们,但我找不到它们,因此,如果有人能告诉我是否有某种方法可以找到哪个.o文件确实有这些不需要的公开符号?我可以用nm吗?或者我需要另一个工具吗C nm:如何在共享库中显示符号的对象文件?,c,linker,shared-libraries,elf,objdump,C,Linker,Shared Libraries,Elf,Objdump,我有25个对象文件,它们被组合成一个共享库。我已经用gcc生成了共享库,当我在寻找带有nm-D libmylib的公开符号时,我在.bss部分找到了两个名为I和y的不受欢迎的公开符号。我试图在我的源文件中找到它们,但我找不到它们,因此,如果有人能告诉我是否有某种方法可以找到哪个.o文件确实有这些不需要的公开符号?我可以用nm吗?或者我需要另一个工具吗 任何帮助都将不胜感激。在包含目标文件的目录中,您可以运行: find . -name '*.o' -exec nm -D {} \; -print
任何帮助都将不胜感激。在包含目标文件的目录中,您可以运行:
find . -name '*.o' -exec nm -D {} \; -print
这将打印符号,然后打印文件名一旦链接了共享库,您就无法再分辨其中的哪些部分来自哪个对象文件 可以搜索从中生成库的各个对象:
find . -name '*.o' -print0 | xargs -0 nm -A | egrep ' (i|y)$'
您可以要求链接器在定义它们时告诉您:
$(CC) -fPIC -shared -o libmy.so $(OBJS) -Wl,-y,i,-y,y
如果您从使用-g
编译的对象构建库,您可以询问GDBi
和y
来自哪里:
gdb -q libmy.so
(gdb) info var ^i$
(gdb) info var ^y$
nm-D
不适用于可重定位对象——它们没有动态符号表。