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 件のコメント:
コメントを投稿