2014-10-02 4 views
1

Я пытаюсь включить библиотеку qpOASES C++ в проект Rcpp, который я создаю в RStudio.Включая библиотеки сторонних разработчиков в проект R

Я просмотрел папки для написания R и различные виньетки Rcpp. Я нашел это post, который ссылается на this заархивированный разговор. Используя это в качестве руководства, я скомпилировал библиотеку qpOASES в статическую библиотеку (libqpOASES.a и libqpOASES.so). Я последовал за этим youtube video о том, как использовать внешнюю библиотеку в RStudio. Видео проинструктировало меня создать папки lib и inc внутри моего проекта R. Внутри папки lib находятся два файла статической библиотеки (libqpOASES.a & libqpOASES.so). Внутри папки inc, которую я разместил, я поместил libqpOASES.hpp и каталог qpOASES, который содержит другие файлы заголовков, на которые ссылается libqpOASES.hpp).

Я работаю на компьютере с Windows, но пакет, который я создаю, в конечном итоге должен также работать с unix. В настоящее время в моей MakeVars (и Makevars.win) файл, у меня есть следующий:

PKG_CPPFLAGS = -I../inc 
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) -L../lib -llibqpOASES 

Когда я чист и восстановить проект: он успешно строит до следующего:

g++ -m64 -shared -s -static-libgcc -o default.dll tmp.def LS_LocalLaplacian.o RcppExports.o RegularizedLeastSquares.o TrainNetworks.o affinityMatrix.o dist2.o dn.o dominateSet.o rcpparma_hello_world.o -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lRlapack -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lRblas -lgfortran -L../lib -llibqpOASES -Ld:/RCompile/CRANpkg/extralibs64/local/lib/x64 -Ld:/RCompile/CRANpkg/extralibs64/local/lib -LC:/PROGRA~1/R/R-31~1.0/bin/x64 -lR 
c:/rbuildtools/3.1/gcc-4.6.3/bin/../lib/gcc/i686-w64-mingw32/4.6.3/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -llibqpOASES 
collect2: ld returned 1 exit status no DLL was created 
ERROR: compilation failed for package 'default' 

Я проверил именования вещей для опечаток и т. д., но не обнаружили проблемы там. Я попытался удалить «-llibqpOASES» из объявления PKG_LIBS, он компилирует; Однако, когда я пытаюсь использовать методы, предоставляемые библиотекой qpOASES, они не могут быть найдены:

undefined reference to qpOASES::QProblem::QProblem(int, int, qpOASES::HessianType)' 
RegularizedLeastSquares.o:RegularizedLeastSquares.cpp:(.text+0x2a8): undefined reference to 
qpOASES::QProblem::~QProblem()' 
collect2: ld returned 1 exit status 
no DLL was created 
ERROR: compilation failed for package 'default' 

Как успешно использовать внешний C++ библиотеки в RStudio?

ответ

2

Существует много существующих пакетов, которые делают это - я бы взял один из них и посмотрел, как он работает.

Относительно недавний пример: nloptr, который связывается с NLopt. Я помог сделать часть сборки Unix немного более гибкой (т. Е. Либо использовать библиотеку, если она есть, а загрузить и построить ее - до того, как она всегда будет последней). Вы можете использовать это как автономный тестовый пример для сравнения.

+0

Просто обратите внимание, что исправлена ​​ссылка на [nloptr] (https://cran.rstudio.com/web/packages/nloptr/index.html). Ссылка @ dirk-eddelbuettel просто нужна 'r' в' nloptr' –