我的问题有点复杂:
图书馆: 我有一个用 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/