因此,当奇怪的错误跳出XCode时,我仍然感觉自己像个新手。昨天我开始得到这个:
___ gxx_personality_v0“,引自:___ gxx_personality_v0 $ non_lazy_ptr
那时构建一个单元测试目标,在XCode中使用带有iPhoneSDK的 .mm 文件。当我将文件扩展名更改回 .m 时,错误就消失了,因为我还没有使用C ++代码。 (虽然我打算这样做。)凭借我有限的知识,我用Google搜索并看到其他人表示正在使用错误的编译器。另一个链接指的是标记设置不正确。随着知识的限制越来越多,我认为UnitTest目标中的链接器选项是最佳选择。事实证明,标准C ++库类型设置默认设置为动态。将此设置更改为静态会使我的错误消失,我的测试现在为绿色条...错误...绿色按钮。我在这里问,因为我仍然不知道我在做什么。显然这个设置会影响编译器,但我需要更多细节。我是否正在为自己的另一场灾难做好准备。如果有的话会产生什么负面影响?为什么我之前没有遇到过这个问题?我之前在单元测试中使用过 .mm 文件,但我相信我当时正在使用GoogleToolsForMac
代码库进行单元测试,现在我使用本机XCode支持进行单元测试。有人可以帮我解释一下吗?
答案 0 :(得分:0)
简答:发生错误的原因是您使用gcc
驱动程序而不是g++
编译C ++代码。
更长的答案:当您致电gcc myfile.mm
时,GCC驱动程序足够聪明,可以从.mm
文件扩展名中识别出您正在编译Objective-C ++代码,所以它汇编得很好。但是,在链接时,如果你仍然使用gcc
作为驱动程序(也许你一步编译和链接?),它不会自动链接到C ++ stanbard库(和支持对象文件),因此没有链接。