我有一个使用GHUnit进行单元测试的iPhone项目。最近,我需要实现复数并重载一些运算符以简化FFT的计算。这里的目标是创建一种干净的方式来执行FFT,而不需要像FFTW这样的库所使用的所有可能功能的开销,从这个意义上说,我可以进一步自定义我想在FFT中进行的计算次数(所以我降低了分解这个或在传统DFT中使用的分解的复杂性。
简而言之,这就是为什么我决定用C ++实现自己的FFT库,而不是使用FFTW。但是,这导致了GHUnit的一些问题。我的所有生产目标都可以与我的FFT库集成正常工作,但GHUnit拒绝工作。具体来说,我得到像GHComposeString这样的东西的链接器错误。这只发生在我的单元测试目标中。我想知道这个问题可能是什么?起初,我怀疑这可能是因为C和C ++在函数名称被破坏方面的差异,但它似乎并没有影响项目的其余部分,只影响GHUnit部分。
任何有关将C ++与GHUnit混合的帮助表示赞赏。
答案 0 :(得分:0)
这不是一个真正的答案,但我认为你的名字已经走上正轨了。 Mangling在链接时完成。 GHUnit继承自OCUnit,在运行时由dyld注入应用程序的内存空间。因此,可能会出现GHUnit / OCUnit关于修改Obj-C ++文件的某些问题。
答案 1 :(得分:0)
您是否将GHUnit包含在extern "C"?
中这样可以防止它们受到损害。
理想情况下,他们的标题应该在内部提供,但不是每个人都认为他们的标题在C ++中使用:
#ifdef __cplusplus
extern "C" {
#endif
...// other content here
#ifdef __cplusplus
} // end of scope of extern "C"
#endif
答案 2 :(得分:0)
过去曾经咬过我的一件事(相关)是.m文件(默认情况下)编译为Obj-C,而.mm文件编译为Obj-C ++。
这适用于混合两者(Obj-C(++)和cpp),如果你正在进行iPhone开发(在iOS中),你可能会这样做。
仔细检查您使用FFT类的Obj-C测试文件是否具有.mm而不是.m扩展名。
答案 3 :(得分:0)
将-lstdc++
添加到测试目标中的“其他链接标记”。