Я пытаюсь включить библиотеку qpOASES c ++ в проект Rcpp, который создаю в RStudio.
Я просмотрел пакеты Writing R и различные виньетки Rcpp. я нашел это сообщение какие ссылки этот Архивированный разговор. Используя это в качестве руководства, я скомпилировал библиотеку qpOASES в статическую (libqpOASES.a и libqpOASES.so) библиотеку. Я следил за этим YouTube видео о том, как использовать внешнюю библиотеку в 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?
Есть много существующих пакетов, которые делают это — я бы взял один из них и посмотрел, как он работает.
Относительно недавний пример nloptr который связывает с NLopt. Я помог сделать сборку на стороне Unix более гибкой (т. Е. Либо использовать библиотеку, если она есть, либо скачать и собрать ее — до того, как она всегда это делала). Вы можете использовать это как самостоятельный тестовый пример для сравнения.