5

我有一个 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*) 的未定义引用

发出的命令是

g++ -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 或类似的东西。

4

1 回答 1

1

请参阅package inlinecxxfunction()和inline 的文档。getPlugin()

您需要填写正确的 -I... 和 -L... 标志。hack 有助于标题sprintf(),它不会为您提供库位置。

此外,昨天关于使用 rcpp-devel 的提示仍然有效。你今天在那里收到了三个高质量的回复。所以为什么不使用它。我想我们在邮件列表档案中也有这方面的例子。

于 2010-09-09T19:34:24.760 回答