[英]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.