NM linux命令输出含义

时间:2017-01-24 17:11:46

标签: linux static-libraries symbols static-linking nm

我在我的lib中搜索特定的符号:

nm --undefined-only -A libcpprest.a | grep "error_category"

我获得了:

libcpprest.a:json.cpp.o:          U _ZNSt14error_categoryC2Ev
libcpprest.a:json.cpp.o:          U _ZNSt14error_categoryD2Ev
libcpprest.a:json.cpp.o:          U _ZTISt14error_category

什么意思是“ _ZNSt14 ”和“ C2Ev ”?

有没有办法清理nm输出?

1 个答案:

答案 0 :(得分:1)

C ++编译器执行name mangling以支持函数重载等功能(使用相同的函数名称多次使用不同的签名,接受不同的参数)。不同的编译器可能会使用不同的约定来进行名称修改。

您可以使用c++filt实用程序将名称解析为更易读的形式。在你的情况下:

> c++filt -n _ZNSt14error_categoryC2Ev
std::error_category::error_category()

> c++filt -n _ZNSt14error_categoryD2Ev
std::error_category::~error_category()

> c++filt -n _ZTISt14error_category
typeinfo for std::error_category

这是3个不同的符号,包含名称" error_category":构造函数,析构函数和类型信息。