c - 纳米: how to show object file of a symbol in a shared library?

标签 c linker shared-libraries elf objdump

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

如有任何帮助,我们将不胜感激。

最佳答案

一旦共享库被链接,您就无法再分辨它的哪些部分来自哪个目标文件。

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

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$

关于c - 纳米: how to show object file of a symbol in a shared library?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365347/

相关文章:

linux - 抑制共享库的编译时链接

c - 在 c 中,在具有 strtok 函数的空格上拆分 char*,除非在引号之间

有人可以解释一下这个声明中发生了什么吗?

编译简单的 hello world ZeroMQ C 示例,编译标志?

c++ - MS visual studio 2013 SDL 不工作

linux - 如何链接到 GCC 中特定版本的共享库

shared-libraries - 缺少libsourcey -fPIC编译错误

android - 如何在 Android 模拟器 X86 上禁用二进制转换器?

c - 为什么我得到的是 "popq %rbp"而不是 "leave"?

C程序制作链表的第二个副本