【问题标题】:Build R package with C Code for Linux and Windows使用 C 代码为 Linux 和 Windows 构建 R 包
【发布时间】:2012-10-23 04:38:48
【问题描述】:

我一直在做研究,但我不太清楚如何构建我的 R 包,它调用 C 函数,以便它在 Windows 和 Linux 环境中工作。我正在 Linux 机器上构建包。

我有两个C文件,一个.C和两个.C,我使用package.skeleton(...)后把这两个文件放在src目录下。在命名空间文件中,我使用命令:useDynLib(one,two)。它是否正确?还是我需要输入实际的函数名而不是文件名?需要导出函数名吗?

我需要将 .so 文件放在 src 目录中还是会自动创建这些文件?我担心它不会在需要 .dll 文件的 Windows 机器上运行。

如您所见,我有点困惑,谢谢您的帮助。

【问题讨论】:

  • 在 NAMESPACE 文件中 useDynLib(mypkg) 而不是一、二。这适用于所有平台。

标签: r


【解决方案1】:

标准 R 手册之一是Writing R Extensions。本手册的一部分是5 System and foreign language interfaces 部分。这可能会回答您的大部分问题。关于动态链接库(dllso),它们是动态构建的。你开发你的包,包括 C 代码。一旦您想从源代码安装库(例如使用R CMD INSTALL spam)或创建二进制分发版,C 代码将被编译到适当的库文件中。

【讨论】:

  • 谢谢,@Martin Morgan 的评论对我帮助很大。
【解决方案2】:

面对类似的头痛,我改用 C++ 并结合 Rcpp。 Rcpp 为您解决编译包时的所有难题:

http://dirk.eddelbuettel.com/code/rcpp.html

还有一个关于如何使用 Rcpp 构建包的完整小插曲:

http://dirk.eddelbuettel.com/code/rcpp/Rcpp-package.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2019-06-29
    • 2017-05-23
    • 2011-11-07
    相关资源
    最近更新 更多