2017-03-10 2 views
0

cpp 파일에 init이라는 함수가 있지만 컴파일 할 때 g ++는 _z4initv라는 심볼을 오브젝트 파일에 작성하므로 ld와 옵션을 연결하면 -e init, 분명히 ld는 심볼 init을 인식하지 못합니다. g ++로 C 스타일의 심볼 이름을 만드는 방법이 있습니까?g ++에서 C 심볼 이름을 강제로 작성하는 방법

+0

이전에 'extern'C ''어딘가 이전에 본적이 있습니까? 그것이하는 것이 결코 생각해 보지 못했습니까? –

+0

내 파일의 시작 부분에 #if define (__ cplusplus) extern "C"#endif를 써야합니다. – Adrien

답변

0

예 :

extern "C" void init() { ... /* some code */ ... } 

을 당신이 당신이 필요로하는 C 소스 파일에 포함 할 헤더 파일에서 선언이있는 경우 :

void init() { ... /* some code */ ... } 

그런 다음 extern "C"로 선언 할 필요가 name mangling을 억제하는 __cplusplus 매크로를 사용하여 C 또는 C++ 소스 파일에 헤더 파일을 포함하는지 확인하십시오.

#ifdef __cplusplus 
extern "C" 
#endif 
void init(void); 

인수를 사용하지 않으면 헤더 파일의 함수를 인수 목록에 void으로 선언해야합니다. 왜냐하면 그 선언은 void init()을 의미하기 때문입니다.은 C.

관련 문제