3

我有一个使用 GHUnit 进行单元测试的 iPhone 项目。最近,我需要实现复数并重载一些运算符以简化 FFT 的计算。这里的目标是创建一种干净的方式来执行 FFT,而不需要像 FFTW 这样的库使用的所有可能功能的开销,从这个意义上说,我可以进一步自定义我想在我的 FFT 中执行的计算数量(所以我降低了分解这个或传统 DFT 中使用的那个的复杂性)。

简而言之,这就是为什么我决定用 C++ 实现我自己的 FFT 库,而不是使用 FFTW。然而,这给 GHUnit 带来了一些问题。我的所有生产目标都与我的 FFT 库的集成正常工作,但 GHUnit 拒绝工作。具体来说,我遇到了 GHComposeString 之类的链接器错误。这只发生在我的单元测试目标中。我想知道这个问题可能是什么?起初,我怀疑这可能是因为 C 与 C++ 在函数名称的错位方式上存在差异,但它似乎不会影响项目的其余部分,只是 GHUnit 部分。

任何将 C++ 与 GHUnit 混合的帮助表示赞赏。

4

4 回答 4

0

添加-lstdc++到测试目标中的“其他链接器标志”。

于 2011-04-15T19:31:35.860 回答
0

你是用extern "C"包装你的 GHUnit吗?

这将防止他们被破坏。

理想情况下,他们的头文件应该在内部提供,但并不是每个人都认为他们的头文件在 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

这不是一个真正的答案,但我认为你在名字修饰的正确轨道上。修改是在链接时完成的。GHUnit 继承自 OCUnit,在运行时由 dyld 注入到应用程序的内存空间中。因此,可以想象 GHUnit/OCUnit 可能会在处理 Obj-C++ 文件方面存在某种问题。

于 2009-11-21T01:15:28.470 回答
0

过去困扰我的一件事(相关)是 .m 文件(默认情况下)被编译为 Obj-C,而 .mm 文件被编译为 Obj-C++。

这适用于混合两者(Obj-C(++) 和 cpp),如果你正在做 iPhone 开发(在 iOS 中),你可能是。

仔细检查使用 FFT 类的 Obj-C 测试文件是否具有 .mm 而不是 .m 扩展名。

于 2011-04-15T19:18:58.393 回答