リンカーに問題があります。私はこういうコードを持っています:Objective-C++からC-Functionを呼び出すときのリンカエラー
double given_amount = self.modelController.levelCompleteRewardAmount;
swrve_currency_given(swrve, (CFStringRef)@"currencyName", given_amount);
このコードは、objective-cとobjective-C++ファイルの2つの別々の場所にあります。これは、Objective-Cの土地で罰金コンパイルが、swrve_currency_given()関数は、私のWGController.mmファイルに次のように発生します
Undefined symbols for architecture armv7:
"swrve_currency_given(Swrve*, __CFString const*, double)", referenced from:
-[WGController giveTheUserSomeCashForPlayingThisLevel] in WGController.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
私は、このエラーはOBJの-C対に関連している場合、完全にわからないんだけどC++のものですが、はのように感じます。私の理論は、おそらくそれがObj-Cクラスの関数だと考えているということでしょうか?すべてのヘルプは高く評価され
#import "swrve.h"
:「をswrve」コードは、サードパーティのコード、1 .Hと.Cファイルであり、私はそうのようにインポートしています!それはCの関数ではなくC++の関数のコンパイラに指示します
#if defined __cplusplus
extern "C" {
#endif
void swrve_currency_given (...whatever goes here...);
#if defined __cplusplus
};
#endif
: おかげ
あなたはまた、リンカーのプロジェクトでそれをインポートしているを見てみましょうか?ターゲットのプロパティに移動し、概要ページで「リンクされたフレームワークとライブラリ」を開きます。 'swrve'ライブラリはそこにあるはずです。そうでない場合は、それを追加して、再度コンパイルしてみてください。 – dasblinkenlight
ライブラリは静的なlib /フレームワークではなく、単に.cと.hファイルです。 (私はそれを反映するために私の質問を更新しました)。 –