Objective c 在C+中编译C代码+;目标内的代码-C++;代码
我的问题有点复杂: 库: 我有一个用C和C++编写的图书馆。它使用Apple LLVM在XCode中进行了出色的编译。 这个库本身的工作是由C代码完成的,而C++部分只是C++接口,因为我更喜欢C++。理论上,我只需要用C++来与之相协调。 应用程序: 我在Objective-C中有一个应用程序,它使用上面的库。因为我与图书馆的通信是通过C++完成的,所以我需要一个.mm文件,以便从“ObjuleC++”调用我的库。 在编辑过程中。。。出现了几种“C”语言:Objective c 在C+中编译C代码+;目标内的代码-C++;代码,objective-c,ios,xcode,objective-c++,llvm-3.0,Objective C,Ios,Xcode,Objective C++,Llvm 3.0,我的问题有点复杂: 库: 我有一个用C和C++编写的图书馆。它使用Apple LLVM在XCode中进行了出色的编译。 这个库本身的工作是由C代码完成的,而C++部分只是C++接口,因为我更喜欢C++。理论上,我只需要用C++来与之相协调。 应用程序: 我在Objective-C中有一个应用程序,它使用上面的库。因为我与图书馆的通信是通过C++完成的,所以我需要一个.mm文件,以便从“ObjuleC++”调用我的库。 在编辑过程中。。。出现了几种“C”语言: 错误:非常量静态数据成员的初始化必
- 错误:非常量静态数据成员的初始化必须超出行
- 错误:文件作用域中不允许使用语句表达式
- 等等
如果我再做一个C++应用程序来测试库,它就行了
我如何从C++中从Objul-C++代码中编译C代码?为什么它与从一个普通的C++代码编译不同?经过长时间的尝试和谷歌,我终于可以明白。 在调用我的C头之前,我应该取消定义MAX和MIN宏。由于某种原因,它们是先前定义的。编译器不会精确地显示错误。这就是为什么它很难。我使用的C框架有自己的最大和最小宏声明 另一件可能对其他人有用的非常有趣的事情是,在我们需要做同样的事情之前:如果我们使用一些实现自己的max和min的C框架,则取消定义max和min(小写) 它解决了两个问题。别忘了这样做
#ifdef __cplusplus
extern "C" {
#endif
<Some C method declaration>
#ifdef __cplusplus
}
#endif
\ifdef\uuucplusplus
外部“C”{
#恩迪夫
#ifdef_uucplusplus
}
#恩迪夫
在包含C方法声明的头文件中。我很少看到不起作用的东西,但有些东西是不同的。例如,您的代码中不能有任何名为
id
或SEL
的内容,因为这将解决Objective-C++中的一些特殊问题。您能给出更多的细节(例如,触发“非静态静态数据成员”错误)的确切内容吗?您是否尝试将库的文件类型设置为C++源文件?因为这个,我以前有过问题。您需要在XCode中选择该文件,转到文件检查器(alt+cmd+1)并选择文件类型。George,文件检查器将我的文件.mm识别为Objective-C++。。。所以这是对的。谢谢Kevin,行:typedef struct_uutag_LIGHT_CONTEXT{char data[u CB_DECL(LIGHT_CONTEXT_LEN)]}LIGHT CONTEXT;抛出错误。。。作为#define#CB(DECL)(x)和#define LIGHT(CONTEXT)LEN MAX(左(左)LIGHT(伦)和#右(伦))
我敢打赌MAX
是。Objective-C/Cocoa在Foundation.framework
中定义了此宏(NSObjCRuntime.h
)。