NM Linux命令输出含义

3

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

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输出?

2个回答

2
通过在nm命令中添加"--demangle"标志,也可以对符号名称进行解析[1]
nm --demangle --undefined-only -A libcpprest.a | grep "error_category"

1
C++编译器执行名称重载以支持功能,如函数重载(使用相同的函数名称多次,但具有不同的签名,接受不同的参数)。不同的编译器可能使用不同的命名约定。
您可以使用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”的不同符号:一个构造函数,一个析构函数和类型信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接