编译Rcpp包

mic*_*elp 1 c++ r rcpp

背景

我的公司正在考虑将R与RStudio一起带入我们的工作环境.作为安全检查的一部分,我们必须编译包中的每个不同的C/C++文件,以扫描可能的安全漏洞.我知道二进制文件是可用的,我真的希望我可以使用它们,但我们必须自己编译.我从大约5年前就没有R经验和一点c ++经验.我想要编译只是在RCPP C++代码,我不知道这是可能的.

我试过的

我首先尝试使用VisualStudio进行编译,发现它不符合c99.然后我尝试了cygwin并且它不支持w_strings.我现在已经安装了ubuntu,并且在编译时遇到了很多"未定义的引用"错误.我知道(或者至少我相信)Rcpp旨在帮助在R中使用C++.鉴于此,我是否可以将这些文件中的一些编译为独立的二进制文件?

我在编译时得到的一些空引用api.cpp(我不相信完整列表会提供比partial更多的信息,因为它很长):

undefined reference to 'R_NilValue'
undefined reference to 'REprintf'
undefined reference to 'R_FlushConsole'
undefined reference to 'Rf_install'
undefined reference to 'Rf_setAttrib'
undefined reference to 'Rf_mkChar'
undefined reference to 'SET_STRING_ELT'
undefined reference to 'Rf_allocVactor'
undefined reference to 'R_ExternalPtrAddr'
etc...
Run Code Online (Sandbox Code Playgroud)

现在我假设这不起作用,因为我没有按照预期的方式使用Rcpp并传入任何值.如果我尝试使用另一个使用Rcpp的R包来编译Rcpp C++文件并保留二进制文件?有什么我可以做的只是把二进制文件从CRAN中删除?

这实际上是一个相对简单的解决方案,我无法在其他任何地方找到,虽然大多数人只能下载二进制文件,所以无关紧要.

1)从CRAN下载(不是apt-get,对我来说不起作用)

2)sudo tar -xvf Rcpp_X.XX.X.tar.gz

3)R CMD INSTALL Rcpp

这将为您创建二进制.SO.

Dir*_*tel 6

快速的:

  • 拼写为Rcpp,即大写字母R后跟小写字母cpp.喜欢文件扩展名.

  • 你做出了英雄的假设,即Rcpp可以由Visual Studio编译[1].它不能[2].我们已经字面记载这几年,从2008年底开始,当我重新启动RCPP即在minumum.

  • 请参阅每次下载Rcpp时附带的Rcpp常见问题解答中的条目1.3和2.9 .

  • 同样为Cygwin.R不在Cygwin下构建.因此,不要尝试在Cygwin下构建Rcpp.

  • 最后但同样重要的是:不确定您对Rcpp文档的了解程度,以及您的想法.它不是一些将R脚本转换为Windows二进制文件的神奇小马.没有这样的小马存在.Rcpp是R的扩展包,它使R和C++交换更容易.不多也不少.现在有几百个Rcpp问题,所以请四处寻找感受.

所有这一切也几乎肯定是一个可以关闭的重复问题,但我现在没时间看.

[1]注意这里的单数,它不是复数"Visual Studios",或者你指的是太平洋西北地区公司的编译器和IDE以外的东西.

[2]除非你是一个真正的C++ - on-Windows专家,并愿意或多或少地建立你自己的构建系统[3]

[3]所有这一切主要是由于R无法使用VS工具链构建.并且美元知道人们已经尝试过.这里的责任在于操作系统/编译器供应商,因为它没有遵循标准,这些标准使R Core团队能够在Windows(通过gcc),OS X以及基本上所有Unix版本(包括所有Linux变体)上提供一致的产品.