Я хочу использовать библиотеку libDAI C ++ в R-пакете и хочу, чтобы пакет:
- мог использоваться в Linux и Windows
- saveдисковое пространство (во внешней библиотеке ~ 60 Мб)
- конечному пользователю не нужно устанавливать boost и gmp для компиляции
Моя текущая настройка:
- прекомпиляция libDAI
- копирование libdai.a в lib /
- копирование всех заголовочных файлов libDAI в inst / include
- добавление Makevar в src /
Изменить файл Makevar:
# include libraries
PKG_CPPFLAGS =-I../inst/include/
PKG_LIBS = -Llib -l../lib/libdai.a
Мой скрипт для доступа к библиотеке libDAI (test.cpp в src /):
#include <dai/factorgraph.h>
#include <Rcpp.h>
#include <cmath>
using namespace Rcpp;
using namespace std;
using namespace dai;
//'
//' Creates libDAI factor graph object
//'
//' @param factor_graph character definition of the factor graph
//' @export
// [[Rcpp::export]]
void initialize_factor_graph(const char* factor_graph) {
// read the factor graph from the string
std::istringstream fgStream(factor_graph);
FactorGraph net;
net.ReadFromString( fgStream );
// Output some information about the factorgraph
cout << "Factor graph has " << net.nrVars() << " variables" << endl;
cout << "Factor graph has " << net.nrFactors() << " factors" << endl;
}
running Rscript -e "Rcpp::compileAttributes('libdai')"
, затем R CMD INSTALL libdai
возвращает ошибку:
Error: package or namespace load failed for 'libdai' in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object
'/home/jk/libs/R/libdai/libs/libdai.so':
/home/jk/libs/R/libdai/libs/libdai.so: undefined symbol: _ZTVN3dai11FactorGraphE
Error: loading failed
Итак, мои вопросы:
- Что не так с моей настройкой?
- Что такоелучшая процедура для предоставления моего окончательного пакета в CRAN?
- Какая самая хорошая настройка для совместного использования пакета?
Мой вопрос тесно связан с this and этот вопрос и несколько других постов, связанных со ссылками на статические библиотеки, однако мне не удалось решить мою проблему с этими ссылками.