2

基本的なObjective-C++ファイル内からCocoaFramework(具体的には、MultitouchSupport)を使用しようとしていますが、g ++がgccとは異なるリンカーフラグを持っているかのように、未定義のシンボルエラーが発生し続けます。

私の最終的な目標は、C ++ネットワークライブラリを、 http://steike.com/code/multitouch/から入手した基本的なObjective-Cコードと統合することです。

これを実行して元のコードをコンパイルすると、正常に機能します。

gcc -F/System/Library/PrivateFrameworks -framework MultitouchSupport test.m -o test -std=c99

しかし、test.mm後でC ++ファイルを含めて参照できるように、ファイルの名前をに変更すると、以下は機能しません。

g++ -F/System/Library/PrivateFrameworks -framework MultitouchSupport test.mm -o test

そして私にこれらのエラーを与えます:

Undefined symbols for architecture x86_64:
"MTDeviceCreateDefault()", referenced from:
    _main in ccq0vzuM.o
"MTRegisterContactFrameCallback(void*, int (*)(int, Finger*, int, double, int))", referenced from:
    _main in ccq0vzuM.o
"MTDeviceStart(void*, int)", referenced from:
    _main in ccq0vzuM.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [testpp] Error 1

このObjective-C++ファイルで探しているフレームワークを確認してC++を使用できるようにするには、何をする必要がありますか?

ありがとう!

4

1 に答える 1

1

これら 3 つの関数を宣言するヘッダーに、extern "C"それらをラップするブロックはありますか? このようなもの?

#ifdef __cplusplus
extern "C" {
#endif

// function declarations here

#ifdef __cplusplus
}
#endif

そうでない場合: ヘッダー ファイルに追加するか、#importそのヘッダー ファイルの周囲に同様のラッパーを追加できます。

于 2012-04-06T05:14:24.980 に答える