Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在C+中编译C代码+;目标内的代码-C++;代码_Objective C_Ios_Xcode_Objective C++_Llvm 3.0 - Fatal编程技术网

Objective c 在C+中编译C代码+;目标内的代码-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++编写的图书馆。它使用Apple LLVM在XCode中进行了出色的编译。 这个库本身的工作是由C代码完成的,而C++部分只是C++接口,因为我更喜欢C++。理论上,我只需要用C++来与之相协调。 应用程序: 我在Objective-C中有一个应用程序,它使用上面的库。因为我与图书馆的通信是通过C++完成的,所以我需要一个.mm文件,以便从“ObjuleC++”调用我的库。 在编辑过程中。。。出现了几种“C”语言:

  • 错误:非常量静态数据成员的初始化必须超出行
  • 错误:文件作用域中不允许使用语句表达式
  • 等等
这只发生在Objective-C上++

    Objul-C++(App)-> C++头(LIB)-> C标题(LIB,外加“C”)>强>不OK!!!为什么?

如果我再做一个C++应用程序来测试库,它就行了

    C++(App)-> C++(LIB)-> C标题(LIB,外加“C”)->强> OK <强> < /LI>
细节:我总是在这里使用Apple LLVM编译器

问题:
我如何从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
)。