Ссылка на другой пакет с помощью R inline - PullRequest
3 голосов
/ 09 сентября 2010

У меня есть функция C ++ / Rcpp, которую мне нужно скомпилировать и связать с пакетом pomp, чтобы получить доступ к генератору случайных чисел. Я могу включить заголовочный файл, но как получить ссылку на скомпилированный код?

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)

Код использует функцию reulermultinom в пакете pomp, и когда я его оцениваю, выдает ошибку

неопределенная ссылка на `reulermultinom (int, double, double *, double, double *)

Команды, которые выдаются

г ++ -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 или что-то в этом роде.

1 Ответ

1 голос
/ 09 сентября 2010

Пожалуйста, смотрите документацию для cxxfunction() и getPlugin() в упаковке inline .

Вам необходимо правильно указать флаги -I ... и -L .... Взлом sprintf() помогает для заголовка, он не дает вам местоположение библиотеки.

Кроме того, вчерашний совет об использовании rcpp-devel все еще сохраняется. Сегодня у вас три качественных ответа. так почему бы не использовать его. Я думаю, что у нас есть примеры для этого в архивах списков рассылки.

...