Collegamento a un altro pacchetto con R linea
Domanda
Ho una funzione C ++ / Rcpp la necessità che per compilare e collegamento al pacchetto di pompa per ottenere l'accesso a un generatore di numeri casuali. Posso ottenere il file di intestazione incluso, ma come ho capito al link per il codice compilato?
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)
Il codice utilizza la funzione reulermultinom nel pacchetto pompa e quando valuto che dà l'errore
undefined reference to `reulermultinom (int, double, double *, doppia, doppia *)
I comandi sono in emissione
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
E 'Sembra che ci dovrebbe essere un -lpomp o qualcosa del genere.
Soluzione
Si prega di consultare la documentazione per cxxfunction()
e getPlugin()
nel pacchetto linea .
È necessario compilare una corretta -I ... e -L ... bandiere. L'hack sprintf()
aiuta per l'intestazione, che non ti dà la posizione della libreria.
Inoltre, suggerimento di ieri sull'utilizzo rcpp-devel detiene ancora. Hai tre ad alta qualità risponde oggi. quindi perché non usarlo. Penso che abbiamo esempi di questo nei archivi della mailing list anche.