Связывание библиотеки C с R

Недавно я нашел эту библиотеку C ( http://libxlsxwriter.github.io/) и попытался использовать ее с R.

Заставить библиотеку C работать самостоятельно не составило труда. Я загрузил zlib а также libxlsxwriter с помощью msys2и побежал make в libxlsxwriter папка.

Теперь я могу запустить этот пример Hello-World, давайте назовем его test.c:

#include "xlsxwriter.h"
void main() {
  lxw_workbook  *workbook  = workbook_new("myexcel.xlsx");
  lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
  int row = 0;
  int col = 0;
  worksheet_write_string(worksheet, row, col, "Hello me!", NULL);
  workbook_close(workbook);
}

Теперь я могу скомпилировать test.c запустив:

cc test.c -o test -lxlsxwriter -lz

А затем запустите исполняемый файл:

./test

И теперь у меня есть документ Hello-World Excel.

Заставить его работать с R было намного сложнее. Если я просто бегу:

R CMD SHLIB test.c

Я получаю эту ошибку: ibxlsxwriter/include/xlsxwriter/common.h:19:42: fatal error: xlsxwriter/third_party/queue.h: No such file or directory #include "xlsxwriter/third_party/queue.h"

Все же файл явно там, когда я проверяю.

Любой совет о том, как подключить эту библиотеку C с R? На данный момент я просто пытаюсь получить пример hello-world из R.

Будет ли лучше начать сборку с xlsxwriter в inst папку, а затем попробуйте написать makevars что получит xlsxwriter правильно скомпилировать? Я знаю, что должен был бы включить PKG_CPPFLAGS = -I../inst/libxlsxwriter но я предполагаю, что мне нужно больше, чем это.

1 ответ

Вы можете попробовать пакеты Anaconda R. в Continuum. Они используют пакеты MSYS2 довольно напрямую. Пакет toolchain называется m2w64-toolchain, и пакет posix иногда также полезен для сборки пакетов R.

conda install -c r r-essentials m2w64-toolchain posix

Отказ от ответственности: я работаю на Continuum, но я также работаю на MSYS2.

Это не будет элегантно, но если никто не нашел элегантного решения в течение 4 лет, вы также можете использовать:

shell("cc test.c -o test -lxlsxwriter -lz")

Это поможет с этой частью, а также с любой незначительной потребностью в быстром доступе к функциям xlsx.

На данный момент я просто пытаюсь запустить пример hello-world из R.

Вы, наверное, уже знали об этом, но на всякий случай не подумали об использовании shell() команда.

Другие вопросы по тегам