Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C nm:如何在共享库中显示符号的对象文件?_C_Linker_Shared Libraries_Elf_Objdump - Fatal编程技术网

C 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

我有25个对象文件,它们被组合成一个共享库。我已经用gcc生成了共享库,当我在寻找带有nm-D libmylib的公开符号时,我在.bss部分找到了两个名为Iy的不受欢迎的公开符号。我试图在我的源文件中找到它们,但我找不到它们,因此,如果有人能告诉我是否有某种方法可以找到哪个.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$

nm-D
不适用于可重定位对象——它们没有动态符号表。