0

我的问题有点复杂:

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

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

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

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

它只发生在 Objective-C++

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

如果我制作另一个 C++ 应用程序来测试库,那就没问题了

  • C++ (app) -> C++ (lib) -> C header (lib, with extern "C") -> OK

详细信息:我一直在这里使用 Apple LLVM 编译器

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

4

2 回答 2

2

别忘了做

#ifdef __cplusplus
extern "C" {
#endif

<Some C method declaration>

#ifdef __cplusplus
}
#endif

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

于 2012-07-04T03:04:53.047 回答
0

经过长时间的尝试和谷歌,我终于可以弄清楚了。在调用 C 头文件之前,我应该取消定义 MAX 和 MIN 宏。由于某种原因,它们是先前定义的。编译器不会精确显示错误。这就是为什么这很困难。我正在使用的 C 框架有它自己的 MAX 和 MIN 宏声明......

另一个可能对其他人有用的非常有趣的事情是,在我们需要做同样的事情之前:如果我们使用一些实现它自己的 max 和 min 的 C 框架,请取消定义 max 和 min(小写)。

它解决了这两个问题。

于 2012-07-04T02:58:51.827 回答