我正在尝试开始使用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
答案 0 :(得分:2)
这里有两个完全不同的问题:
安装Rcpp所需的一切。 OS X方面应记录在Simon维护的相关页面上。如果你有工具,并且安装了Rcpp,那么你应该能够cppFunction('double nPi(int x) { return x*M_PI; }')
使用Rcpp提供的函数创建一个可以作为nPi()
访问的可调用C ++函数 - 和{{ 1}}应该返回一个值。
您选择的IDE及其设置。除了要求它工作之外,这与1没什么关系。
所以我会继续研究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
因为它是:
<Rcpp/XXX>
string.h
目录中查找Rcpp
(当它不应该时)。