5

乱数ジェネレーターにアクセスするには、コンパイルして pomp パッケージにリンクする必要がある C++/Rcpp 関数があります。ヘッダー ファイルをインクルードすることはできますが、コンパイルされたコードにリンクするにはどうすればよいですか?

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)

コードは pomp パッケージの reulermultinom 関数を使用しており、評価するとエラーが発生します

`reulermultinom(int, double, double*, double, double*) への未定義参照

発行されるコマンドは、

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

-lpomp などがあるはずです。

4

1 に答える 1

1

パッケージinlinecxxfunction()のおよびのドキュメントを参照してください。getPlugin()

適切な -I... および -L... フラグを記入する必要があります。ハックはヘッダーに役立ちますが、ライブラリの場所はsprintf()わかりません。

また、rcpp-devel の使用に関する昨日のヒントは引き続き有効です。今日は質の高い返信が 3 件ありました。なぜそれを使用しないのですか?メーリングリストのアーカイブにもこの例があると思います。

于 2010-09-09T19:34:24.760 に答える