objective-c - 在 Objective-C++ 代码中的 C++ 代码中编译 C 代码

标签 objective-c ios xcode objective-c++ llvm-3.0

我的问题有点复杂:

图书馆: 我有一个用 C 和 C++ 编写的库。它使用 Apple LLVM 在 XCode 中完美编译。 这个库本身的工作是由 C 代码完成的,而 C++ 部分只是一个 C++ 接口(interface),因为我更喜欢 C++。理论上我只需要使用 C++ 来与之通信。

应用: 我在 Objective-C 中有一个使用上述库的应用程序。当然,由于与我的库的通信是通过 C++ 完成的,所以我需要一个 .mm 文件才能从“Objective-C++”调用我的库。

在编译过程中...发生了几次“C”语言的发布:

  • 错误:非常量静态数据成员必须在行外初始化
  • 错误:文件范围内不允许语句表达式
  • 等...

它只发生在 Objective-C++ 中

  • Objective-C++ (app) -> C++ headers (lib) -> C headers (lib, with extern "C") -> 不行!!!为什么?

如果我创建另一个 C++ 应用程序来测试库,它就可以了

  • C++ (app) -> C++ (lib) -> C 头文件(lib,带有 extern "C") -> OK

详情:我一直在这里使用 Apple LLVM 编译器

问题: 如何从 Objective-C++ 代码从 C++ 编译 C 代码?为什么它不同于从常规 C++ 代码编译?

最佳答案

不要忘记做

#ifdef __cplusplus
extern "C" {
#endif

<Some C method declaration>

#ifdef __cplusplus
}
#endif

在包含 C 方法声明的头文件中。

关于objective-c - 在 Objective-C++ 代码中的 C++ 代码中编译 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319858/

相关文章:

Swift:如何填充 UITableView

xcode - 错误 : conditional compilation flags must be valid Swift identifiers (rather than 'DEBUG” ')

ios - 如何在 iPhone 5 上获取 IMEI

ios - 应用程序因无法识别的选择器发送到实例而崩溃 - 可能是骗局

ios - Xcode:如何在 iOS 5 中创建新 View 并设置其 Controller ?

c# - Monotouch守护程序应用程序

ios - 在 iOS 上加密 SQLite 数据库文件

ios - AirPrint 对话框中缺少按钮

objective-c - Cocoapods:如何为 3rd 方库创建自己的 pod?

ios - 核心数据迁移: Could not cast value of type 'NSManagedObject_MyType' to 'MyModule.MyType'