2017-03-10 58 views
0

我在cpp文件中有一個名爲init的函數,但是當我編譯它時,g ++在目標文件中創建了一個名爲_Z4initv的符號,所以當我用ld選項後-e init,顯然ld不能識別符號init。有沒有辦法用C++創建C風格的符號名稱?如何強制g ++創建C符號名稱

+0

曾經見過'extern「C」'之前的某處?從來不知道它做了什麼? –

+0

我在我的文件開頭寫了#if define(__ cplusplus)extern「C」#endif – Adrien

回答

0

如果你有一個像例如

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

然後抑制name mangling需要將其申報爲extern "C"

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

如果你在一個頭文件中的聲明,你想在你需要一個C源文件,包括使用__cplusplus宏來檢查是否將頭文件包含在C或C++源文件中:

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

請注意,頭文件中的函數必須在參數列表中用void聲明,如果它沒有任何參數。這是因爲聲明void init()意味着意味着其他在C.

相關問題