使用 g++ 编译 Rcpp 库时出错:Rcpp.h 未找到
Error compiling Rcpp library with g++: Rcpp.h not found
我正在关注 Hadley 在 Advanced R 中关于 Rcpp 的章节,但无法理解使用 Rcpp 将 C++ 函数调用到 R 中的一些含义。
特别是,为什么 C++ 文件包含指令:
#include <Rcpp.h>
using namespace Rcpp;
如果像往常一样使用 g++ 编译这些文件,不涉及 R,将导致 Rcpp.h not found
错误。
是 Rcpp.h 意味着只能从 R 调用,例如使用 sourceCpp
?请注意,我想为纯 C++ 程序以及使用 Rcpp 的 R 包维护完全相同的 C++ 文件,但之前的错误让我想知道这是否可能。我错过了什么吗?
谢谢
附录
这是书中的示例 C++ 文件。它在 运行 Rcpp::sourceCpp("example.cpp")
时工作得很好,但如果从终端使用 g++ -o example example.cpp
会导致上述编译错误(添加 main
并不能解决这个问题)。 g++ 版本为 10.1.0.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double meanC(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
/*** R
library(microbenchmark)
x <- runif(1e5)
microbenchmark(
mean(x),
meanC(x)
)
*/
这是您的理解错误。
if g++ -o example example.cpp
is used
没有 R 文档(据我所知)说明您可以这样做。如果您从我们许多人推荐的地方开始,即您的 R 副本随附的 Writing R Extensions 手册,您将看到等效的命令是
R CMD COMPILE somefile.cpp
R CMD SHLIB somefile.cpp
但是那些没有考虑到对 Rcpp 的额外需求。这实际上变得复杂。
但是手工完成所有工作是一种很好的学习体验,所以我的一些较早的工作室也这样做,my book on Rcpp。
也就是说,没有人建议在实际工作中这样做。坚持小插图 Rcpp Introduction and maybe Rcpp Attributes.
中显示的内容
我正在关注 Hadley 在 Advanced R 中关于 Rcpp 的章节,但无法理解使用 Rcpp 将 C++ 函数调用到 R 中的一些含义。
特别是,为什么 C++ 文件包含指令:
#include <Rcpp.h>
using namespace Rcpp;
如果像往常一样使用 g++ 编译这些文件,不涉及 R,将导致 Rcpp.h not found
错误。
是 Rcpp.h 意味着只能从 R 调用,例如使用 sourceCpp
?请注意,我想为纯 C++ 程序以及使用 Rcpp 的 R 包维护完全相同的 C++ 文件,但之前的错误让我想知道这是否可能。我错过了什么吗?
谢谢
附录
这是书中的示例 C++ 文件。它在 运行 Rcpp::sourceCpp("example.cpp")
时工作得很好,但如果从终端使用 g++ -o example example.cpp
会导致上述编译错误(添加 main
并不能解决这个问题)。 g++ 版本为 10.1.0.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double meanC(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
/*** R
library(microbenchmark)
x <- runif(1e5)
microbenchmark(
mean(x),
meanC(x)
)
*/
这是您的理解错误。
if
g++ -o example example.cpp
is used
没有 R 文档(据我所知)说明您可以这样做。如果您从我们许多人推荐的地方开始,即您的 R 副本随附的 Writing R Extensions 手册,您将看到等效的命令是
R CMD COMPILE somefile.cpp
R CMD SHLIB somefile.cpp
但是那些没有考虑到对 Rcpp 的额外需求。这实际上变得复杂。
但是手工完成所有工作是一种很好的学习体验,所以我的一些较早的工作室也这样做,my book on Rcpp。
也就是说,没有人建议在实际工作中这样做。坚持小插图 Rcpp Introduction and maybe Rcpp Attributes.
中显示的内容