簡體   English   中英

將 C 庫鏈接到 R

[英]Linking C library to R

我最近發現了這個 C 庫( http://libxlsxwriter.github.io/ ),並嘗試將它與 R 一起使用。

讓 C 庫自己工作並不困難。 我使用msys2下載了zliblibxlsxwriter ,並在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 運行。

難道是一個更好的辦法,開始了建設一個包,與xlsxwriterinst的文件夾,然后嘗試寫一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM