Я пытаюсь разработать пакет R, который использует Arrayfire благодаря библиотеке Rcpp. Я начал писать пример кода (назовем его 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')
Моим первым удивлением было то, что мне пришлось установить некоторые флаги вручную (sourceCpp
, похоже, игнорирует конфигурацию Makevars при компиляции фрагмента кода C++). Я сделал это с помощью:
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
К сожалению, я не смог найти решение своей проблемы (даже если некоторые вопросы о переполнении стека поднимают проблемы, которые на первый взгляд более или менее похожи).
Как я могу это исправить?