2016-07-19 6 views
2

Недавно я нашел эту библиотеку C (http://libxlsxwriter.github.io/), и попытался использовать его с R.Linking C библиотека для 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 

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

Получение работы с 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? На данный момент я просто пытаюсь получить привет-мир пример для запуска из R.

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

+0

Проверьте 'R CMD config', ища переменные' SHLIB_ * '; установите их, чтобы они указывали в соответствующих местах перед запуском 'R CMD SHLIB'. –

ответ

2

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

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

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