Mac OS X上的Rcpp + Eclipse

时间:2013-03-18 23:47:00

标签: eclipse r osx-mountain-lion rcpp

我正在尝试开始使用Rccp并决定使用Eclipse作为开发环境,因为我已经使用StatEt for R.我很难得到一个简单的程序来编译和运行,并且会很感激一些帮助!< / p>

简单地说,我尝试按照博客上的说明进行操作:http://blog.fellstat.com/?p=170完全用于设置Rcpp,RInside和Eclipse以及示例程序。我在Mountain Lion上运行,并使用XCode中的命令行选项安装了g ++。我认为我忠实地遵循了博客中的所有步骤,但无法让程序编译。我认为问题在于包含头文件的方式,如下面输出的片段所示。据我所知,/usr/include/c++/4.2.1/cstring的第52行是<string.h>的包含语句,编译器包含Rccp/include/string.h而不是来自string.h的{​​{1}}早先在include路径上找到了。

我是C ++的新手所以我真的很感激有关如何继续的一些指示。

-Krishna

std

3 个答案:

答案 0 :(得分:2)

这里有两个完全不同的问题:

  1. 安装Rcpp所需的一切。 OS X方面应记录在Simon维护的相关页面上。如果你有工具,并且安装了Rcpp,那么你应该能够cppFunction('double nPi(int x) { return x*M_PI; }')使用Rcpp提供的函数创建一个可以作为nPi()访问的可调用C ++函数 - 和{{ 1}}应该返回一个值。

  2. 您选择的IDE及其设置。除了要求它工作之外,这与1没什么关系。

  3. 所以我会继续研究1.看看我是否先把它整理好,然后再转向2.

答案 1 :(得分:2)

总而言之,我遇到的问题是Rcpp中包含与std中名称相同的文件存在冲突。特别是,来自string.h的{​​{1}}被包含在Rcpp string.h std是正确选择的位置,据我所知,这是由于在默认路径之前搜索通过-I指令指定的路径。

我尝试了许多不同的替代方案来解决这个问题,包括删除和重新安装XCode和相关的命令行工具,以及使用macports安装另一个g ++编译器。这些都没有解决这个问题。然后我使用-idirafter指令而不是-I指令作为Rcpp和R的包含文件的搜索路径。我从gcc include order broken?得到了这个提示。这是有效的,因为现在在默认路径之后搜索这些目录。这排除了(至少到目前为止!)来自string.h的{​​{1}}和来自std的{​​{1}}发生冲突的可能性。

要使http://blog.fellstat.com/?p=170的第5步开始工作,我必须在文件string.h中的Rcpp中设置-idirafter路径。

感谢大家的建议。

答案 2 :(得分:1)

您只需删除包含

即可
/Library/Frameworks/R.framework/Resources/library/Rcpp/include/Rcpp

因为它是:

  • 不必要,因为所有R导入的格式为<Rcpp/XXX>
  • 导致此问题,因为编译器在string.h目录中查找Rcpp(当它不应该时)。