【问题标题】:Objective-C with cpp extensions, I don't know what I'm doing带有cpp扩展的Objective-C,我不知道我在做什么
【发布时间】:2009-10-23 14:19:11
【问题描述】:

所以当奇怪的错误从 XCode 中跳出来时,我仍然觉得自己像个新手。昨天我开始得到这个:

___gxx_personality_v0",引用自:___gxx_personality_v0$non_lazy_ptr

那是在构建单元测试目标时,该目标使用 XCode 中的 .mm 文件和 iPhoneSDK。当我将文件扩展名改回 .m 时,错误消失了,因为我还没有在其中使用 C++ 代码。 (虽然我打算这样做。)以我有限的知识,我用谷歌搜索并看到其他人表明正在使用错误的编译器。另一个链接提到了错误设置的标志。有了更有限的知识,我决定 UnitTest 目标中的链接器选项是可以去的地方。事实证明,标准 C++ 库类型设置默认设置为动态。将此设置更改为静态使我的错误消失,我的测试现在变成绿色条......错误......绿色按钮。我在这里问是因为我仍然不知道我在做什么。显然这个设置会影响编译器,但我需要更多细节。我是否正在为未来的另一场灾难做好准备。如果有的话,会有什么负面影响?为什么我以前没有遇到问题?我之前在单元测试中使用过 .mm 文件,尽管我相信我当时使用GoogleToolsForMac 代码库进行单元测试,而我现在使用原生 XCode 支持进行单元测试。谁能帮我解释一下?

【问题讨论】:

    标签: iphone objective-c ios gcc linker


    【解决方案1】:

    简答:发生错误是因为您使用gcc 驱动程序而不是g++ 编译C++ 代码。

    更长的答案:当您调用 gcc myfile.mm 时,GCC 驱动程序足够智能,可以从 .mm 文件扩展名中识别您正在编译 Objective-C++ 代码,因此它会编译好吧。但是,在链接时,如果您仍然使用gcc 作为驱动程序(也许您一步编译和链接?),它不会自动链接到 C++ 标准库(并支持目标文件),因此无法链接。

    【讨论】:

    • 我有点不明白,但这如何适用于 XCode?我没有设置任何驱动程序、gcc 或 g++。我只需单击构建按钮。 (称我为无知。)XCode 中是否有构建设置来告诉它何时使用什么驱动程序?
    • 应该从a中理解。文件扩展名 (.mm) 和 b。您创建的文件类型(文件 > 新建 > C++ 类,或类似的东西)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2019-12-07
    • 2014-02-16
    • 2020-05-15
    • 2016-08-16
    • 2011-05-12
    相关资源
    最近更新 更多