在Objective-C中使用R.Framework
问题描述:
我刚开始尝试将R.Framework引入到Objective-C项目中。我遇到一个问题有一个致命的错误:在Objective-C中使用R.Framework
/Library/Frameworks/R.framework/Headers/R_ext/Boolean.h:31:16: Redefinition of enumerator 'FALSE'
下面是我在我的main.m文件
#import <Foundation/Foundation.h>
#include <R.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
Rprintf("testing R");
}
return 0;
}
我怀疑这是我如何包括相对湿度我也尝试过#import
,但我遇到了同样的问题。
编辑:
此外,Xcode是让我知道,原来定义在usr/include/mach-o/dyld.h
文件正在取得进展。
另外,我从here下载了开源Mac应用程序R(Mac-GUI-1.65.tar.gz),并成功将它构建在同一台机器上。
编辑2:
编译器说以下,内usr/include/mach-o/dyld.h
,是以前的定义:
#ifndef ENUM_DYLD_BOOL
#define ENUM_DYLD_BOOL
#undef FALSE
#undef TRUE
enum DYLD_BOOL { FALSE, TRUE };
#endif /* ENUM_DYLD_BOOL */
冲突是在头文件中的一个(Boolean.h )在R.Framework中有这样的:
typedef enum { FALSE = 0, TRUE /*, MAYBE */ } Rboolean;
并且随时包括我R.h
,它抛出这个错误,说有一个重新定义的枚举器'假'和'真'。
答
Foundation.h
和R.h
定义为TRUE
和FALSE
。要解决这个问题,在包含另一个符号之前,您需要使用#undef
这些符号。
#import <Foundation/Foundation.h>
#undef TRUE
#undef FALSE
#include <R.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
Rprintf("testing R");
}
return 0;
}
您可能需要玩弄包括订单/ #undef
和重新定义符号把事情的工作权利。
感谢您的建议。我尝试了几种不同的排序方法,但我仍然遇到同样的问题。 仅供参考:Xcode让我知道原始定义是在usr/include/mach-o/dyld.h文件中进行的。 – shawnzizzo 2014-10-09 00:40:54
这是有用的信息,你会介意把它添加到这个问题吗? – JasonMArcher 2014-10-09 01:37:01
@JasonMArcher完成。感谢您的建议。 – shawnzizzo 2014-10-09 05:27:33