0
私はcppファイルにinitという関数を持っていますが、コンパイルするとg ++はオブジェクトファイルに_Z4initvというシンボルを作成します。 -e init、明らかにldはシンボルinitを認識しません。 g ++でCスタイルのシンボル名を作成する方法はありますか?g ++でCシンボル名を作成する方法
私はcppファイルにinitという関数を持っていますが、コンパイルするとg ++はオブジェクトファイルに_Z4initvというシンボルを作成します。 -e init、明らかにldはシンボルinitを認識しません。 g ++でCスタイルのシンボル名を作成する方法はありますか?g ++でCシンボル名を作成する方法
などの定義がある場合は、
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.
これまでにextern "C" 'どこかの前に見たことがありますか?それが何をしているのだろうか? –
ファイルの先頭に#if define(__ cplusplus)extern "C" #endifを書いています – Adrien