由于Rcpp库,我正在尝试开发一个使用Arrayfire的R包。我已经开始编写示例代码(将其命名为hello_world.cpp),如下所示:
#include <arrayfire.h>
// [[Rcpp::export]]
bool test_array_fire(){
af::randu(1, 4);
return true;
}
然后,我尝试使用sourceCpp
函数进行编译
Rcpp::sourceCpp('src/hello_world.cpp')
我的第一个惊喜是我必须手动设置一些标志(编译一段C ++代码时,sourceCpp
似乎忽略了Makevars config)。我这样做的是:
Sys.setenv("PKG_CXXFLAGS"="-std=c++11")
Sys.setenv("PKG_CPPFLAGS"="-I/opt/arrayfire/include/")
Sys.setenv("PKG_LIBS"="-L/opt/arrayfire/lib64/ -laf")
但是,代码仍然无法正确编译。每个试验以以下输出结束:
Error in 'dyn.load("/tmp/RtmpHaODIU/sourceCpp-x86_64-pc-linux-gnu-1.0.2/sourcecpp_689c5adb8d/sourceCpp_14.so")':
unable to load shared object '/tmp/RtmpHaODIU/sourceCpp-x86_64-pc-linux-gnu-1.0.2/sourcecpp_689c5adb8d/sourceCpp_14.so':
libaf.so.3: cannot open shared object file: No such file or directory
[不幸的是,我找不到解决问题的方法(即使某些堆栈溢出问题提出的问题乍一看也差不多)。
我该如何解决?
几件事,很快:
sourceCpp()
时,您没有使用包裹