【问题标题】:Import C++ code to IOS application [duplicate]将C ++代码导入IOS应用程序[重复]
【发布时间】:2014-01-16 00:10:00
【问题描述】:

我用 C++ 编写代码,我想在我的 IOS 应用程序中使用它的一些方法,那么是否可以在 XCode 中将 C++ 库“t.cpp”(导入)到 IOS 应用程序? 如果是,那么简单的方法是什么?

【问题讨论】:

    标签: c++ ios objective-c


    【解决方案1】:

    是的,这将不会出错,但是您可能需要更改 Xcode C++ 编译器设置(语言级别和运行时库),具体取决于您使用的 iOS 版本。

    在您的 Objective-C 代码中实际使用 C++ 类时,您只需将所有文件从 .m 重命名为 .mm

    当您想在 Objective-C 头文件中包含 C++ 头文件时会出现复杂情况,而 .m.mm 都可以看到该 Objective-C 头文件。在这种情况下,您可能会发现您需要将更多文件从 .m 更改为 .mm 才能使其正常工作,但如果这变得过于繁琐,有一些方法可以解决。

    【讨论】:

    • 为了避免将 C++ 头文件暴露给太多其他文件的问题,我喜欢编写包装相应 C++ 类或功能的 Objective-C 类。然后,理想情况下,C++ 头文件只包含在包装器 .mm 文件中,而 Objective-C 包装器类的 .h 文件有一个非常干净的接口,没有任何 C++ 提示。
    • @esker 听起来不错。
    【解决方案2】:

    只需将文件添加到项目中即可。

    【讨论】:

      【解决方案3】:

      仅当 translation unit 包含 C++ 标头时,您才需要将文件从 .m 重命名为 .mm。然后,模块被 C++“感染”,需要使用 Objective-C++ 编译器进行编译。

      仅当从该模块直接或间接包含/导入任何 C++ 标头时才需要这样做。无需重命名所有文件。

      此外,如果此 C++ 代码依赖于 C++ 标准库,您还需要通过在可执行二进制文件中设置适当的构建设置来确保可执行二进制文件链接到 C++ 标准库。

      例如,在应用的目标构建设置中,将以下选项添加到Other Linker Flags
      -lc++
      例如:
      OTHER_LDFLAGS = -ObjC -lc++

      注意:

      如果可能,不要在 public Objective-C 标头中包含/导入 C++ 标头,因为这样所有模块在导入此 Objective-C 标头并成为 Objective-C 时都会被 C++ 感染-C++。

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 2011-12-10
        • 2016-10-07
        • 1970-01-01
        • 2012-12-11
        • 2017-07-16
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        相关资源
        最近更新 更多