【发布时间】:2014-09-15 16:40:32
【问题描述】:
我尝试在 64 位 Windows 上将 Rcpp 与 C++11 一起使用。我关注https://stackoverflow.com/a/25456836 并使用 gcc 4.8.1 与 R 3.1.1 和 Rcpp 0.11.2。
使用 C++ 文件simpleProd.cpp
#include <vector>
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
int simpleProd(std::vector<int> vec) {
vec.push_back(5);
int prod = 1;
for (int &x : vec) { // loop over all values of vec
prod *= x; // access each elem., comp. product
}
return prod;
}
我在 R 中尝试过
library("Rcpp")
Sys.setenv("PKG_CXXFLAGS"="-std=c++11")
unlink("mypkg", recursive = TRUE)
Rcpp.package.skeleton("mypkg", cpp_files = "simpleProd.cpp",
example_code = FALSE)
install.packages("mypkg", repos = NULL, type = "source",
INSTALL_opts = "--no-multiarch")
library(mypkg)
没有问题,但如果我运行
simpleProd(1:5)
结果是
Error in .Call("mypkg_simpleProd", PACKAGE = "mypkg", vec) :
"mypkg_simpleProd" not available for .Call() for package "mypkg"
如果我只是使用
sourceCpp("simpleProd.cpp")
simpleProd(1:5)
没有问题。如果vec.push_back(5); 被删除或者没有使用 C++11 就没有问题。在 Linux 和 Mac 上没有问题,最后在 32 位 Windows(使用相应的工具链)上没有问题。
有什么想法吗?谢谢!
编辑:澄清:问题仅发生在特殊情况下:
64位Windows + Rcpp + Package + C++11 + 矢量运算。
如果我更改其中之一,它会起作用。
【问题讨论】: