CS

[windows] Name mangling

전태경 2019. 7. 2. 22:29

네임 맹글링 또는 네임 데코레이션이라고 한다.
네임 맹글링이 나오게된 계기는 C++ 과 같은 객체의 개념이
들어오면서 함수이름이 중복되는 현상이 발생하였다.

예를 들어, ​MyClass::func​YourClass::func 이름은 같아도 다른 기능을 하고 다른 클래스에 속해있는​ 다른 함수이다.
이런한 다름을 식별하기 위해 컴파일단계에서 함수들 마다 고유의 이름을 붙혀준다. 이것을 ​네임 맹글링이라 한다.
따라서, 링커는 각기 다른 이름이 붙은 함수명들을 쉽게 구별할 수 있기에 링크과정을 할 수 있었다.

하지만, 네임 맹글링의 방식은 각 언어마다 다르다.
따라서 호환성이 좋아야하는 dll 작업의 경우 컴파일단에서
다른 형식의 네임 맹글링을 사용하면 사용하는 쪽에서 엉뚱한
함수명을 호출할 수 있다,

이런 문제점을 보완하기 위해 실행파일과 dll 에서 공통 맹글링 형식을 사용하는데, 여기서 많이 사용하는 것이 ​extern “C” 라는 것이다. C형식의 네임 맹글링을 쓰는 이유는 export 되는 함수명을 호출할 시에 함수명 그대로 호출이 가능하다.

참고로 C 네임 맹글링은 함수명에 _를 붙힌다
( i.e. func -> _func )
하지만, 호출은 func 로 진행해야 한다.

끝.