nm - 显示在 .so 文件中声明符号的文件

Posted

技术标签:

【中文标题】nm - 显示在 .so 文件中声明符号的文件【英文标题】:nm - show file that declares a symbol in a .so file 【发布时间】:2018-04-11 15:03:15 【问题描述】:

nm 是否可以显示在 .so 文件中声明符号的文件?假设我有一些文件:

//file.cpp
int get_data();

int main()
    return 0;

如果我将此文件编译为共享对象文件file.so,当我使用nm -C file.so 时,get_data 符号应该会得到一个“U”。 nm 是否也可以显示文件名?对于较大的项目,能够确定哪个文件声明了未解析的符号会很有帮助。

【问题讨论】:

【参考方案1】:

如果我将此文件编译成一个共享对象文件 file.so,我应该得到一个“U”来表示 get_data 符号

你错了:因为没有引用get_data,你实际上不会得到U

回答您的问题:file.cpp 引用 get_data 符号的信息消失了,除非您使用调试信息编译了 file.cpp

如果您这样做了,您可以使用 objdump -dS file.so 来查找 file.cpp 是引用的来源。

【讨论】:

以上是关于nm - 显示在 .so 文件中声明符号的文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux的nm查看动态和静态库中的符号

Linux的nm命令查看动态库和静态库中的符号

Linux命令备忘

nm命令详解

nm:共享库符号出现两次或一次

像 nm -D 或 readelf -s 一样,使用 python ctypes 列出动态符号?