C++のソースから単にCの関数を呼び出すとリンク時に
"undefined reference to"なエラーが出てしまいます。
この辺り大昔にオブジェクト指向を学習していたときに
関数名がそのままシンボルにならないことは知ったのですが、
不覚にも気づくのに時間がかかってしまいました。
そう、目に見えているものがすべてではないんですよね。
解決方法は簡単でCで書かれたfunc()関数をC++から呼び出すのに
extern void func(void); void main(void) { func(); }などとしているのを
extern "C" { extern void func(void); } void main(void) { func(); }に修正するだけです。
よくヘッダファイルの先頭に
#ifdef __cplusplus extern "C" { #endifが、最後に
#ifdef __cplusplus } #endifなんていうおまじないがありますが、まさにこのためにあるんですね。
0 件のコメント:
コメントを投稿