2017-03-10 11 views
0

私はcppファイルにinitという関数を持っていますが、コンパイルするとg ++はオブジェクトファイルに_Z4initvというシンボルを作成します。 -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ソースファイルに含めるヘッダファイルで宣言を持っている場合:あなたはextern "C"としてそれを宣言する必要がありname manglingを阻害する

その後
void init() { ... /* some code */ ... } 

__cplusplusマクロを使用して、CまたはC++ソースファイルにヘッダーファイルを含めるかどうかを確認します。

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

引数をとらない場合、ヘッダファイルの関数は引数リストにvoidで宣言しなければならないことに注意してください。それは宣言がvoid init()を意味するので何か他の何かのC.

関連する問題