在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.hR.h定义为TRUEFALSE。要解决这个问题,在包含另一个符号之前,您需要使用#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和重新定义符号把事情的工作权利。

+0

感谢您的建议。我尝试了几种不同的排序方法,但我仍然遇到同样的问题。 仅供参考:Xcode让我知道原始定义是在usr/include/mach-o/dyld.h文件中进行的。 – shawnzizzo 2014-10-09 00:40:54

+0

这是有用的信息,你会介意把它添加到这个问题吗? – JasonMArcher 2014-10-09 01:37:01

+0

@JasonMArcher完成。感谢您的建议。 – shawnzizzo 2014-10-09 05:27:33