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 로 진행해야 한다.
끝.
