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

nm - show file that declares a symbol in a .so file

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

//file.cpp
int get_data();

int main(){
    return 0;
}

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

If I compile this file into a shared object file, file.so, I should get a "U" for the get_data symbol

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

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

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