3

GHUnitを使用して単体テストを実行するiPhoneプロジェクトがあります。最近、FFTの計算を容易にするために、複素数を実装し、一部の演算子をオーバーロードする必要がありました。ここでの目標は、FFTWなどのライブラリが使用する可能性のあるすべての機能のオーバーヘッドなしでFFTを実行するクリーンな方法を作成することでした。この意味で、FFTで実行する計算の数をさらにカスタマイズできました(したがって、これまたは従来のDFTで使用されているものを因数分解する複雑さを軽減します)。

つまり、FFTWを使用するのではなく、独自のFFTライブラリをC++で実装することにしたのはこのためです。ただし、これによりGHUnitでいくつかの問題が発生しました。私のすべての本番ターゲットは、FFTライブラリの統合で正しく機能しますが、GHUnitは機能しません。具体的には、GHComposeStringなどでリンカーエラーが発生します。これは、ユニットテストターゲットでのみ発生します。この問題は何でしょうか?最初は、これは関数名のマングル方法がCとC ++で異なるためだと思いましたが、プロジェクトの残りの部分には影響せず、GHUnitの部分だけに影響するようです。

C++とGHUnitの混合に関するサポートをいただければ幸いです。

4

4 に答える 4

0

これは実際には答えではありませんが、名前マングリングで正しい方向に進んでいると思います。マングリングはリンク時に行われます。OCUnitから継承するGHUnitは、実行時にdyldによってアプリのメモリスペースに挿入されます。したがって、Obj-C++ファイルのマングリングに関してGHUnit/OCUnitに何らかの問題がある可能性があります。

于 2009-11-21T01:15:28.470 に答える
0

GHUnitに含まれるものをextern"C"でラップしていますか?

それは彼らが壊されるのを防ぎます。

理想的には、それらのヘッダーはこれを内部的に提供する必要がありますが、C++で使用されているヘッダーについて誰もが考えているわけではありません。

#ifdef __cplusplus
extern "C" {
#endif

...// other content here

#ifdef __cplusplus
}  // end of scope of extern "C"
#endif
于 2011-02-11T04:36:02.497 に答える
0

過去に私を悩ませてきた(関連する)ことの1つは、.mファイルは(デフォルトで)Obj-Cとしてコンパイルされ、.mmファイルはObj-C++としてコンパイルされることです。

これは、2つ(Obj-C(++)とcpp)を混合している場合に当てはまります。これは、iPhone開発(iOSで)を行っている場合はおそらくそうです。

FFTクラスを利用しているObj-Cテストファイルの拡張子が.mではなく.mmであることを再確認してください。

于 2011-04-15T19:18:58.393 に答える
0

-lstdc++テストターゲットの「その他のリンカーフラグ」に追加します。

于 2011-04-15T19:31:35.860 に答える