2010年10月16日土曜日

xcode で symbol(s) not found 備忘録

xcode で、c++ のコードを追加したら、symbol(s) not found と怒られてしまった。
あるはずの関数がシンボルが見つからない。名前をみると _hoge という形式なので、ははぁ?C++の関数をC でリンクしにいってるな?と、そこまではわかったのだが、手を抜いて単純に extern "C" だけを付けたのがまずかった。

 *.mm *.cpp 等では、cplusplus のコードとしてコンパイルされるが、*.m など Objective-C では c と同じ扱いのようだ。そのせいで、extern "C" 自体が構文エラーになっていた。ヘッダの宣言では、ちゃんと

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
};
#endif

してやらんと、いけません。
なんとなく、不安にかられるなぁー。class や template キーワードが入った場合は、c++ マングリングにスイッチしたりすんの??? Objective-C 不気味な感じがする

0 件のコメント: