我已经用C++编写了一个代码,该代码使用了boost库并且还使用了多个文件。我正在尝试在R中执行功能。

这是我的C++函数原型(prototype):

extern "C" double function1(double rho, double mu, double limit);

这是我的R函数:
dyn.load('path_to_dll\\x64\\Debug\\project.dll')
.Call("function1", as.double(1.0), mu = as.double(1.0/20.0), limit = as.double(3413.85))

当我调用该函数时,它给了我以下错误:
Error in .Call("function1", as.double(1), mu = as.double(1/20),  :
  C symbol name "function1" not in load table

我关注了this
但是没有运气。我要去哪里错了?

最佳答案

由于这是一个多文件C++项目,因此应将代码打包为R包。使用Rcpp实际上非常容易,例如参见this answerRcpp-package小插图包含更多信息。另外,使用boost的简单方法是通过BH包。您可以研究许多在CRAN上使用Rcpp + BH的示例程序包,例如我自己的dqrng。在R Packages书中,当然还有官方文档Writing R Extensions中,也可以找到更多详细信息。

使用BH软件包的关键是LinkingTo: BH文件中的DESCRIPTION。这样可以确保-I<path_to_BH_package>/include是编译器标志的一部分。为了使用放置在inst/include中的头文件,应将PKG_CPPFLAGS = -I../inst/include添加到src/Makevars中。

07-27 18:18