我有 25 个目标文件,它们组合成一个共享库。我已经用 gcc 生成了共享库,当我用nm -D libmylib.so寻找暴露的符号时,我在 .bss 部分中发现了两个名为i和y的不受欢迎的暴露符号。我试图在我的源文件中找到它们,但我找不到它们,所以如果有人能告诉我是否有某种方法可以找到哪个 .o 文件恰好具有这些不希望的暴露符号?我可以用 nm 做还是需要其他工具?
任何帮助,将不胜感激。
我有 25 个目标文件,它们组合成一个共享库。我已经用 gcc 生成了共享库,当我用nm -D libmylib.so寻找暴露的符号时,我在 .bss 部分中发现了两个名为i和y的不受欢迎的暴露符号。我试图在我的源文件中找到它们,但我找不到它们,所以如果有人能告诉我是否有某种方法可以找到哪个 .o 文件恰好具有这些不希望的暴露符号?我可以用 nm 做还是需要其他工具?
任何帮助,将不胜感激。
在包含目标文件的目录中,您可以运行:
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
你可能会问 GDB 从哪里来:i
y
gdb -q libmy.so
(gdb) info var ^i$
(gdb) info var ^y$