[英]Linking C library to R
我最近發現了這個 C 庫( http://libxlsxwriter.github.io/ ),並嘗試將它與 R 一起使用。
讓 C 庫自己工作並不困難。 我使用msys2
下載了zlib
和libxlsxwriter
,並在libxlsxwriter
文件夾中運行make
。
現在我可以運行這個 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
但我猜我需要的不止這些。
您可能想嘗試 Continuum 的 Anaconda R 軟件包。 他們相當直接地使用 MSYS2 包。 工具鏈包稱為 m2w64-toolchain,posix 包有時也可用於構建 R 包。
conda install -cr r-essentials m2w64-toolchain posix
免責聲明:我為 Continuum 工作,但我也在 MSYS2 上工作。
它不會很優雅,但如果 4 年沒有人找到優雅的解決方案,你不妨使用:
shell("cc test.c -o test -lxlsxwriter -lz")
這將有助於這部分以及即時訪問 xlsx 功能的任何次要需求
在這一點上,我只是想讓 hello-world 示例從 R 運行。
您可能已經知道這一點,但以防萬一您沒有想到使用shell()
命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.