Blogブログ

2015-3-18 ITのお話

xcode で c 言語のコンパイル

表題の件。

なーんでも無いのですがちょっとびっくりする程はまったので、共有。
#この文章はそんな方に届くのか・・・?(笑

xcode の objective-c で c 言語や、c++ はコンパイル可能です。やり方は沢山 web 上にありますので、ご参考まで。特段、難しい事でもありません。

ところが。ちょっとはまりました。
コンパイルすると「リンクエラー」。

c 言語で書いたクラスに以下の記述が無かったので、c++ から見えませんでした。

==

ifdef __cplusplus

extern “C” {

endif

==

まぁ、よくある奴ですよね。
で、上記の対応をする前に、以下の対応をしてしまいました。当該ファイルに対するコンパイラの指定を xcode の gui で実行してしまったのです。

具体的には以下の設定。

このファイルは「c でコンパイルするよ」と。
この設定で、c++ のソースからは呼び出す事ができました。

ところが、当該ファイルの関数を objective-c から呼び出すとまたして「リンクエラー」。
呼び出し元が、C++ ソースならコンパイルに成功するのに、objective-c ソースなら、リンクエラー。かなーり、ハマりました。

しかも、上記の設定をしたのが私では無かったのでだいぶ悩みました。
結果は、設定ミス。上記の[extern “C”]さえ書いておけば、対象の c 言語ソースのコンパイラ設定は以下のデフォルトの設定のままで良かったようです。

いやー、時間取られましたー。