Связывание библиотеки 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()
команда.