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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top