extern int test();
int main()
{
return test();
}
코드를 gcc -c -o test.o test.c
으로 작성하고 nm test.o
을 실행할 때 이름이 불일치하는 것을 발견했습니다. nm
은 test
이지만 _test
은 출력하지 않습니다.이름 맹 글링이 발생하지 않는 이유는 무엇입니까?
내 환경은 C 프로그램에서 발생하지 않습니다 ubuntu 16.04
gcc 5.4.0
실제로는 _name mangling_이 아니지만 함수 이름에 밑줄을 추가하는 것은 사용하는 툴 체인에 따라 달라집니다. C16x 마이크로 컨트롤러를 개발하는 동안 Keil과 Tasking의 도구를 사용했습니다. 하나는 _을 추가했지만 다른 하나는 추가하지 않았습니다. 동일한 CPU 아키텍처의 경우에도 마찬가지입니다. 따라서 C 함수를위한 호출 규칙이 어떻게되어 있는지 툴 체인 문서 나 CPU의 EABI 설명을 읽어야합니다. – Gerhardh