我正在尝试运行“使用Rcpp进行无缝R和C ++集成”的代码(第32页,代码清单2.10)但是它给出了一个错误。有人可以向我解释为什么不工作?感谢
Code <- '
#include <gsL/gsl_const_mksa.h> // decl of constants
std::vector<double> volumes() {
std::vector<double> v(5);
v[0] = GSL_CONST_MKSA_US_GALLON; // 1 US gallon
v[1] = GSL_CONST_MKSA_CANADIAN_GALLON; // 1 Canadian gallon
v[2] = GSL_CONST_MKSA_UK_GALLON; // 1 UK gallon
v[3] = GSL_CONST_MKSA_QUART; // 1 quart
v[4] = GSL_CONST_MKSA_PINT; // 1 pint
return v;
}'
gslVolumes <- cppFunction(code, depends="RcppGSL")
这是消息错误:
file16e2b6cb966.cpp: In function ‘SEXPREC* sourceCpp_52966_volumes()’:
file16e2b6cb966.cpp:30: error: ‘__result’ was not declared in this scope
make: *** [file16e2b6cb966.o] Error 1
llvm-g++-4.2 -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG -I/usr/local/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include" -I"/Library/Frameworks/R.framework/Versions/3.0/Resources/library/RcppGSL/include" -fPIC -mtune=core2 -g -O2 -c file16e2b6cb966.cpp -o file16e2b6cb966.o
Erro em sourceCpp(code = code, env = env, rebuild = rebuild, showOutput = showOutput, :
Error 1 occurred building shared library.
答案 0 :(得分:4)
看起来你有错别字:
Code <- '
#include <gsL/gsl_const_mksa.h> // decl of constants
应该{{1}}使用小写code <-
,然后c
使用小写'ell'。
一般情况下,我建议打开详细模式:
#include <gsl/gsl_const_mksa.h>
本来会告诉你的事情
gslVolumes <- cppFunction(code, depends="RcppGSL", verbose=TRUE)
和
object code not found
关于丢失的标题。
但我现在确实看到,对于当前版本,我也得到了file....cpp:10:63: fatal error: gsL/gsl_const_mksa.h: No such file or directory
。将
调查。
编辑:这是一个错误/更改。它在我写这一章时起作用了,现在你需要
从__result not declared
作业
#include <gsl/gsl_const_mksa.h>
行
为code
电话添加新的includes=...
参数,如下所示:
更正了电话:
cppFunction()
答案 1 :(得分:3)
除了Dirk所说的,我建议您将代码提升为.cpp文件。
// [[Rcpp::depends(RcppGSL)]]
#include <Rcpp.h>
#include <gsl/gsl_const_mksa.h> // decl of constants
// [[Rcpp::export]]
std::vector<double> volumes() {
std::vector<double> v(5);
v[0] = GSL_CONST_MKSA_US_GALLON; // 1 US gallon
v[1] = GSL_CONST_MKSA_CANADIAN_GALLON; // 1 Canadian gallon
v[2] = GSL_CONST_MKSA_UK_GALLON; // 1 UK gallon
v[3] = GSL_CONST_MKSA_QUART; // 1 quart
v[4] = GSL_CONST_MKSA_PINT; // 1 pint
return v;
}
然后,您可以sourceCpp
该文件。