0
我在cpp文件中有一個名爲init的函數,但是當我編譯它時,g ++在目標文件中創建了一個名爲_Z4initv的符號,所以當我用ld選項後-e init,顯然ld不能識別符號init。有沒有辦法用C++創建C風格的符號名稱?如何強制g ++創建C符號名稱
我在cpp文件中有一個名爲init的函數,但是當我編譯它時,g ++在目標文件中創建了一個名爲_Z4initv的符號,所以當我用ld選項後-e init,顯然ld不能識別符號init。有沒有辦法用C++創建C風格的符號名稱?如何強制g ++創建C符號名稱
如果你有一個像例如
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.
曾經見過'extern「C」'之前的某處?從來不知道它做了什麼? –
我在我的文件開頭寫了#if define(__ cplusplus)extern「C」#endif – Adrien