gpt4 book ai didi

c++ - XCode 和 iPhone SDK : C++ Standard Library Type?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:14 24 4
gpt4 key购买 nike

因为我是所有 C++ 和 gcc 相关事物的新手,所以我需要了解一些可能很重要的东西。如果我在输出为静态库的新 iphone 项目中使用 .mm 文件,则会出现此错误:

“___gxx_personality_v0”,引用自:

如果我将 C++ 标准库类型从动态(默认)更改为静态,错误就会消失。这是SDK的限制吗?动态库中不能启用 Obj-C++ 扩展吗?请记住,我是新手,我只是假装知道我在说什么。我还想知道这些设置之间的区别,以及更改它们是否会产生潜在的负面影响。我的假设是否正确,因为动态库是在运行时加载的,而静态库是在构建时链接到最终二进制文件的?如果是这样,那么为什么 iPhone SDK 会允许构建动态库?迄今为止,您无法在 iPhone 上安装 3rd 方库并在应用之间共享它们。

更新有几个人做出了回应,我很感激这些答案。但是,我想澄清一些我原来的问题似乎被误解的事情。将文件类型从“.m”切换到“.mm”不是答案,而是触发异常的原因。情况是这样的,为 iPhone 开发一个静态库,它使用扩展名为“.mm”的 Obj-C++ 文件。然后在 iPhone 应用程序(或单元测试套件)中使用此库。除非客户端目标切换为使用“静态”而不是标准 C++ 库类型的默认“动态”,否则您将看到此错误。我最初认为我可能通过更改此设置引入了一个微妙的错误,但我现在试图了解其中的差异以及为什么默认设置的方式似乎与其典型用例相反。

最佳答案

Martin York 是正确的,您正在使用错误的编译器进行编译,但 OSX 的默认文件系统不区分大小写,因此您通常不能在实践中使用“.M”来指示 Obj-C++。您需要使用 .m 命名您的 Obj-C 文件,使用 .mm 命名您的 Obj-C++ 文件。

虽然您不能在 .m 文件中使用 Obj-C++,但您当然可以将 .m 文件链接到 C++ 代码。在同一个项目中混合使用 Obj-C、Obj-C++ 和 C++ 是没有问题的。只需正确命名文件,以便使用正确的编译器:

  • m - Obj-C
  • mm - Obj-C++
  • cpp - C++

你是正确的,你不能在运行时在 iPhone 上加载私有(private)动态库。 Xcode 允许它有两个原因:Mac 确实允许动态库(因此在基于 SDK 的 IDE 中有特殊情况代码会很痛苦),Apple 开发人员可以并且确实在 iPhone 上创建动态库。所以 Xcode 不禁止它;他们只是不给你一个模板。

关于c++ - XCode 和 iPhone SDK : C++ Standard Library Type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com