Как мне скомпилировать dll с R и RCPP? - PullRequest
4 голосов
/ 12 октября 2011

Я написал файл .cpp и хочу скомпилировать его в .dll для использования с R и RCPP. (без использования встроенного пакета). Я использую WinXP и R 2.13.2 и RCPP 0.9.7. Я использую Rtools 2.14.

  1. Как включить Rcpp.h в путь поиска minGW? Я недооцениваю, что файлы, которые мне нужно включить, находятся в C: \ Program Files \ R \ R-2.13.2 \ library \ Rcpp \ include. Однако я не смог добавить «добавить» их в «путь поиска».

  2. Я устал от временного "взлома". Я скопировал содержимое C: \ Program Files \ R \ R-2.13.2 \ library \ Rcpp \ include в каталог include minGW. Процесс компиляции / компоновки получает из myfile.cpp в myfile.o, но выдает кучу ошибок, прежде чем он может скомпилировать myfile.dll.

Я добавил C: \ Program Files \ R \ R-2.13.2 \ bin \ i386 в мою PATH, и я вызываю R CMB SHLIB myfile.cpp из командной строки WinXP.

Что мне делать?

1 Ответ

12 голосов
/ 12 октября 2011

Несколько быстрых моментов:

  1. Компиляторы gcc и g++ из MinGW ведут себя так же, как и другие компиляторы из семейства gcc.Это означает, что «add to search path» отсутствует: вы используете переключатель -I/some/dir, чтобы добавить этот путь и каталог.Точно так же -L/some/lib добавляет этот каталог к ​​пути компоновщика.

  2. Вы действительно хотите использовать Makefile.Наши пакеты Rcpp содержат множество примеров;вы можете посмотреть на Makefile в каталоге ConvolveBenchmarks.

  3. Но что вы действительно хотите, так это использовать так называемый «пакет».У нас есть целая виньетка Rcpp-пакет , посвященная этому.Это может быть так же просто, как вызов функции rcpp.package.skeleton(), которая создает пакет для вас --- и динамическая библиотека создается как побочный эффект.

  4. Если все это слишком запутанно, попробуйте сначала ознакомиться с inline .Используйте аргумент verbose=TRUE, чтобы увидеть, как inline создает динамическую библиотеку!

  5. Наконец, мы пишем это Rcpp , а не RCPP.

Список рассылки rcpp-devel также является хорошим источником помощи.

...