Die Anbindung an ein anderes Paket mit R inline
Frage
Ich habe eine C ++ / RCPP Funktion die ich brauche, zu kompilieren und Link zu dem Pomp Paket Zugriff auf einen Zufallszahlengenerator zu erhalten. Ich kann die Header-Datei enthalten bekommen, aber, wie ich es zu Link zu dem kompilierten Code bekommen?
CppColonized<-cxxfunction(
sig=signature(x="numeric", t="numeric", params="numeric", dt="numeric"),
plugin='Rcpp',
includes = sprintf("#include <Rmath.h>\n#include <math.h>\n#include\"%s\"",
base:::system.file("include/pomp.h",package="pomp")),
body=Code,verbose=T)
Der Code verwendet die reulermultinom Funktion in dem Pomp Paket und wenn ich es beurteilen gibt es den Fehler
undefined reference to `reulermultinom (int, double, double *, double, double *)
Die Befehle ausgegeben werden, sind
g ++ -I "C: /PROGRA~1/R/R-211~1.1/include" -I "C: /PROGRA~1/R/R-211~1.1/library/Rcpp/include" -O2 -Wall -c file2f752742.cpp -o file2f752742.o g ++ -shared -s -static-libgcc -o file2f752742.dll tmp.def file2f752742.o C: /PROGRA~1/R/R-211~1.1/library/Rcpp/lib/libRcpp.a -LC: /PROGRA~1/R/R-211~1.1/bin -lR
Ist scheint, wie es sollte eine -lpomp oder etwas ähnliches sein.
Lösung
Bitte beachten Sie die Dokumentation für cxxfunction()
und getPlugin()
in Paket inline .
Sie müssen fill in der richtigen -I ... und -L ... Fahnen. Der sprintf()
Hack hilft für den Header, es ist nicht die Bibliothek Standort nicht geben.
Auch die gestrige Hinweis über die Verwendung von RCPP-devel noch hält. Sie haben drei hochwertige dort heute antwortet. also warum es nicht verwenden. Ich denke, wir Beispiele dafür haben auch in den Archiven der Mailinglisten.