Ich würde etwas Hilfe beim Erstellen eines Rcpp-Pakets benötigen, das mit der NLopt-Bibliothek verknüpft (http://ab-initio.mit.edu/wiki/index.php/NLopt).Rcpp Verknüpfung zu externer Bibliothek (NLopt)
Ich bin auf Windows und mit RStudio 'Build & Reload'.
Ich habe die folgenden Dateien in \ src-Ordner des Pakets:
- \ src
- Makevars.in
- Makevars.win
- RcppExports.cpp
- nlopt .h
- nlopt.hpp
- libnlopt.lib
- libnlopt.def
- libnlopt.a
- libnlopt.dll
, wo ich die LIB kopiert haben (gebaut mit MinGW) und DLL-Dateien von NLOpt zu der \ src-Ordner in der Hoffnung, dass R sie selbst kompilieren würde. Das scheint jedoch nicht der Fall zu sein. Aus diesem Grund habe ich eine Makevars-Datei hinzugefügt, in der ich versuche, eine Verknüpfung zur Bibliothek herzustellen.
Wenn von RStudio ausgeführt wird, erhalte ich die folgende Fehlermeldung, die, nehme ich an, mir sagt, dass es ein Problem mit Verknüpfung (siehe „undefined reference“) an die NLOP Bibliothek:
Installation zu Bibliothek 'C: /Users/g49128/Documents/R/win-library/3.2'
Installation Quelle Paket 'NewPackage' ... ** libs
g ++ -m64 -shared -s - static-libgcc -o NewPackage.dll tmp.def RcppExports .o Rcpp_project_test.o -Lc: /Temp/R/Rcpp/NeuPackage/src/libnlopt.a -Lc:/applications/extsoft/lib/x64 -Lc:/applications/extsoft/lib -LC:/PROGRA ~ 1/R/R-32 ~ 1.2/bin/x64 -lR Rcpp_project_test.o: Rcpp_project_test.cpp :(text + 0x73c.): undefined reference to `__imp_nlopt_create '
So vermute ich, dass ich haven' Ich habe die Makevars richtig verstanden, nicht so versiert in denen.
Aus mehreren CRAN Pakete Beratung, insbesondere nloptr, meine aktuelle beste Vermutung auf den Inhalt beider makevars Dateien ist:
NLOPT_HOME = c:/Temp/R/RCPP/NewPackage/src.
KG_CFLAGS = -I "$ (NLOPT_HOME)"
PKG_LIBS = -L "$ (NLOPT_HOME) /libnlopt.a"
wo 'libnlopt.a' ist die Bibliothek und die Umwelt Die Variable 'NLOPT_HOME' enthält den Pfad zur Bibliothek.
Kann mir jemand sagen, was ich hier vermisse? Jede Hilfe würde sehr geschätzt werden, danke.
Ich denke, Sie invertiert '-l' und' -L' in Makevars ('-L' ist für Verzeichnisse '-l' ist für lib-Dateien) – purplepsycho
danke für die Eingabe, invertieren -l und -L (auch da weder -l noch -L vor dem lib-Pfad sind, scheint das nicht der Fall zu sein; In diesem Fall beschwert sich der Compiler, dass er -lc: /Temp/R/Rcpp/NewPackage/src/libnlopt.a nicht finden kann. –