написание R pkg, который создает исполняемый файл во время установки - PullRequest
0 голосов
/ 29 октября 2019

Я пишу пакет R, который должен включать исполняемый файл («mod.exe» в средах Windows или «mod» в средах Unix). Одна из функций R в пакете вызывает систему, которая вызывает исполняемый файл, следующим образом:

system (paste ("mod", ...))

Поскольку CRAN не будет принимать пакетыс двоичным кодом и потому, что я хотел бы, чтобы пакет был переносимым как для окон, так и для систем Unix, я хотел бы иметь возможность просто включать исходные файлы C («.h» и «.c»), которые можно использовать дляисполняемый «мод» в пакете с исходным кодом. В идеале, когда пользователь устанавливает пакет R, исходные файлы должны быть скомпилированы (с помощью компилятора C, доступного через Rtools в Windows или через собственный компилятор C в Unix), чтобы создать исполняемый файл «mod» во время установки. Тогда, в идеале, исполняемый файл «mod» будет храниться в двоичном пакете, чтобы вышеупомянутая R-функция могла напрямую вызывать «mod». (Файлы .h и .c уже записаны, поэтому я не хочу их переписывать или изменять.)

Я прочитал http://r -pkgs.had.co.nz / package.html , просмотрел https://cran.r -project.org / doc / manual / r-release / R-exts.html и попытался найти в CRAN пакеты, которые уже сделали что-то вроде того, чтоЯ предложил, но не увенчался успехом. Я попытался решить мою проблему, поместив все исходные файлы C для «mod» в каталог / src в пакете с исходным кодом вместе с рабочим make-файлом в надежде, что это приведет к созданию «mod» при сборке пакета исохранить его где-нибудь в двоичном пакете, чтобы функция R могла вызывать «mod». Однако это не сработало, и когда я пытаюсь просмотреть бинарный пакет, единственное, что я вижу, это созданная папка / libs, содержащая папки / i386 и / x64, которые обе содержат динамически связанную библиотеку (в Windows: «RMCSim.dll ») - я не знаю, что делать с этой DLL.

Если я создаю версию пакета, в которой исполняемый файл« mod »помещается в каталог пакета с именем« exec »,функция R может вызывать функцию «мод». К сожалению, это решение (1) не переносимо на среды как Windows, так и Unix, и (2) приводит к пакету, который не может быть принят CRAN.

Пожалуйста, ответьте, если у вас есть какие-либо идеи о том, как решить эту проблемуили если вы знаете какие-либо примеры пакетов, которые делают нечто подобное с исходным кодом на языке C. Спасибо!

...