我有一个cpp文件,我试图用RStudio的sourceCpp()编译。它包括Rcpp.h,所有必需的STL内容和“using namespace Rcpp;”。
然后它有几个函数声明(不导出到R),应该导出到R的函数,最后是声明函数的定义。
这是我尝试编译时得到的结果:
g++ -m32 -I"C:/PROGRA~1/R/R-30~1.2/include" -DNDEBUG -I"C:/Users/Michelle/Documents/R/win-library/3.0/Rcpp/include" -I"d:/RCompile/CRANpkg/extralibs64/local/include" -O2 -Wall -mtune=core2 -c RW_FastSwap.cpp -o RW_FastSwap.o
RW_FastSwap.cpp: In function 'SEXPREC* sourceCpp_27691_fastswap(SEXP, SEXP, SEXP, SEXP, SEXP)':
RW_FastSwap.cpp:459:9: error: '__result' was not declared in this scope
make: *** [RW_FastSwap.o] Error 1
Error in Rcpp::sourceCpp("C:/Users/Michelle/Desktop/Google Drive/FastSwap/RW_FastSwap.cpp") :
Error 1 occurred building shared library.
该行号比cpp文件的最后一行多15行,即cpp文件的最后一行是444.我确保从导出的函数返回的结果类型与返回类型匹配功能。
非常感谢任何有关解决这个问题的指导。
答案 0 :(得分:2)
我们可能需要查看代码或模拟版本。
当您使用compileAttributes()
函数编译Rcpp函数时 - 无论是通过按下RStudio中的按钮,还是显式 - 它会在您的代码示例周围创建附加代码(主要处理数据转换等) )。
我认为当我做一些愚蠢的事情时,我可能已经看到了这个错误,就像没有包含正确的退货声明一样。
根据Ian的评论进行编辑:这对我有用(这里有手动换行符)
R> cppFunction("IntegerVector fastswap(const NumericMatrix x, const int p, \
const IntegerVector S_init, const IntegerVector fixed_in, \
const IntegerMatrix order) { return S_init; }")
R> str(fastswap)
function (x, p, S_init, fixed_in, order)
R>
因此,您的计算机设置可能有问题。但由于这里几乎没有可重复的,所以没有人可以肯定地说。