2

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

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

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

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

4

2 回答 2

4

标准 R 手册之一是编写 R 扩展。本手册的一部分是第5 节系统和外语界面。这可能会回答您的大部分问题。关于动态链接库(dllso),它们是动态构建的。你开发你的包,包括 C 代码。一旦您想从源代码安装库(例如使用R CMD INSTALL spam),或创建二进制发行版,C 代码将被编译到适当的库文件中。

于 2012-10-23T05:17:15.570 回答
4

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

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

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

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

于 2012-10-23T10:35:35.083 回答