在使用RStudio编写R包时,编译Rcpp代码时出现错误

16

我正在使用Rstudio创建一个软件包,并探索使用Rcpp软件包来访问C++代码,但是当尝试构建该软件包时,会抛出以下错误:

致命错误:Rcpp.h:没有那个文件或目录

当考虑在src文件夹中的独立的C++文件时,显然是指在.cpp文件头部的#include <Rcpp.h>指令,内联C++代码编译良好。

我认为这可能与环境变量有关,有人知道在运行Ubuntu 12.04 LTS环境下的Rstudio的正确配置和如何修复吗?

从RStudio IDE内执行 sourceCpp('./src/xyz.cpp') 命令的执行结果与预期相符,当执行 Build and Reload时才会抛出错误。


你考虑过在RStudio的论坛上发布这个问题吗?他们通常很快并且响应迅速。 - Ricardo Saporta
看,我们中的许多人在Ubuntu上使用Rcpp,无论是否使用RStudio,它都可以正常工作。不过,你的问题有点含糊不清。 - Dirk Eddelbuettel
4个回答

27

没有可用的包很难说。我猜你缺少:

LinkingTo: Rcpp

在你的DESCRIPTION文件中。


1
在添加了这个之后,并创建了一些符号链接到Rcpp安装目录,问题得到解决。谢谢。 - Nicholas Hamilton
不应该需要任何符号链接,过度使用它们很可能会在之后造成问题。另外:尝试使用Rcpp.package.skeleton()并比较生成的包。 - Dirk Eddelbuettel

8

嗨,Dirk,谢谢你的回复。当我尝试使用useDynLib(MYPACKAGE)时,似乎出现了另一个奇怪的错误,报告未定义的引用“dgetrf_”,你有什么想法吗? - Nicholas Hamilton
不好意思,由于您坚持不发布代码,我无法提供任何帮助。请将一个可重现的示例发送到rcpp-devel邮件列表中。 - Dirk Eddelbuettel
并不是这样,我只是在准备一个最小化可复现示例(MWE),我的软件包里有很多东西,所以除了创建一个有效的空项目之外,其他方式都很困难。无论如何,结果证明罪魁祸首是RcppArmadillo软件包,具体来说,是因为某种原因调用了行列式函数,不确定为什么。 - Nicholas Hamilton

1
这是因为您的GCC已经更新,与安装R时的版本不同。我也遇到了同样的问题。
我使用以下命令删除了“Rccp”软件包:
remove.packages("Rcpp")

然后您需要重新安装它。只需运行以下命令:
source("https://bioconductor.org/biocLite.R")
biocLite("Rcpp")

1
我在尝试在Ubuntu 14系统上安装“xml2”包时遇到了相同的症状(Rcpp.h: No such file or directory)。在我的情况下,根本原因似乎是“Rcpp”包的安装有问题。有些文件在那里(Rcpp/libs),但其他文件不在(Rcpp/include)。我不确定系统如何进入此状态,但我怀疑该包的安装在一半时终止。重新安装“Rcpp”包为我解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接