2017-01-24 8 views
1

Ich bin ein bestimmtes Symbol in meinem lib Suche:NM Linux-Befehlsausgabe Bedeutung

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

und ich erhalten:

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

was bedeutet "_ZNSt14" und "C2Ev" ?

Gibt es eine Möglichkeit, nm-Ausgabe zu reinigen?

Antwort

1

C++ - Compiler führen name mangling aus, um Funktionen wie das Überladen von Funktionen zu unterstützen (indem derselbe Funktionsname mehrmals mit unterschiedlichen Signaturen verwendet wird und verschiedene Argumente akzeptiert werden). Verschiedene Compiler verwenden möglicherweise unterschiedliche Konventionen für ihre Namensänderung.

Sie können das -Dienstprogramm verwenden, um die Namen in eine besser lesbare Form zu ändern. In Ihrem Fall:

> 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 

Dies ist 3 verschiedene Symbole den Namen „error_category“ enthält: einen Konstruktor, ein destructor und geben Informationen.