【发布时间】:2014-01-16 00:10:00
【问题描述】:
我用 C++ 编写代码,我想在我的 IOS 应用程序中使用它的一些方法,那么是否可以在 XCode 中将 C++ 库“t.cpp”(导入)到 IOS 应用程序? 如果是,那么简单的方法是什么?
【问题讨论】:
标签: c++ ios objective-c
我用 C++ 编写代码,我想在我的 IOS 应用程序中使用它的一些方法,那么是否可以在 XCode 中将 C++ 库“t.cpp”(导入)到 IOS 应用程序? 如果是,那么简单的方法是什么?
【问题讨论】:
标签: c++ ios objective-c
是的,这将不会出错,但是您可能需要更改 Xcode C++ 编译器设置(语言级别和运行时库),具体取决于您使用的 iOS 版本。
在您的 Objective-C 代码中实际使用 C++ 类时,您只需将所有文件从 .m 重命名为 .mm。
当您想在 Objective-C 头文件中包含 C++ 头文件时会出现复杂情况,而 .m 和 .mm 都可以看到该 Objective-C 头文件。在这种情况下,您可能会发现您需要将更多文件从 .m 更改为 .mm 才能使其正常工作,但如果这变得过于繁琐,有一些方法可以解决。
【讨论】:
.mm 文件中,而 Objective-C 包装器类的 .h 文件有一个非常干净的接口,没有任何 C++ 提示。
只需将文件添加到项目中即可。
【讨论】:
仅当 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++。
【讨论】: