C++ Name Mangling
02 Oct 2015C++은 함수 오버라이딩, 함수 오버로딩, 연산자 오버로딩, 템플릿 등 복잡한 기능이 있는 언어이다. 그래서 C++의 함수나 타입은 std::allocator<char>::allocator()
처럼 특수문자가 들어간 복잡한 이름을 가질 수가 있다.
그래서 컴파일러는 이런 이름들을 _ZNSaIcEC1Ev
와 같은 형식으로 이름을 변환해서 사용하는데, 이를 name mangling이라고 부른다.
Name mangling 형식은 컴파일러마다 다르다. 컴파일러에 따라 어떻게 다른 지 궁금하다면 여기를 참고하면 된다.
GCC로 mangling된 이름을 원래대로 돌리고 싶다면 c++filt
라는 툴을 쓰면 된다.
$ c++filt -n _ZNSaIcEC1Ev
std::allocator<char>::allocator()
ltrace상에 나오는 mangling된 이름을 원래대로 표시하고 싶다면 -C
옵션을 쓰면 된다.