我有一个C ++ / Rcpp函数,我需要编译并链接到pomp包以访问随机数生成器。我可以包含头文件,但如何将其链接到已编译的代码?
CppColonized<-cxxfunction(
sig=signature(x="numeric", t="numeric", params="numeric", dt="numeric"),
plugin='Rcpp',
includes = sprintf("#include <Rmath.h>\n#include <math.h>\n#include\"%s\"",
base:::system.file("include/pomp.h",package="pomp")),
body=Code,verbose=T)
代码使用pomp包中的reulermultinom函数,当我评估它时会出现错误
未定义引用`reulermultinom(int,double,double *,double,double *)
发出的命令是
克++ -I“C:/PROGRA~1/R/R-211~1.1/include”-I“C:/PROGRA~1/R/R-211~1.1/library/Rcpp/include” -O2 -Wall -c file2f752742.cpp -o file2f752742.o g ++ -shared -s -static-libgcc -o file2f752742.dll tmp.def file2f752742.o C:/PROGRA~1/R/R-211~1.1/library/Rcpp/lib/libRcpp.a -LC:/PROGRA~1/R/R-211~1.1/bin -lR
似乎应该有-lpomp或类似的东西。
答案 0 :(得分:1)
请参阅cxxfunction()
包中getPlugin()
和sprintf()
的文档。
您需要填写正确的-I ...和-L ...标志。 {{1}} hack有助于标题,它不会为您提供库位置。
此外,昨天关于使用rcpp-devel的提示仍然存在。你今天有三个高质量的回复。所以为什么不用它呢。我想我们在邮件列表档案中也有这样的例子。