使用R包分发已编译的可执行文件

时间:2012-01-23 19:21:13

标签: r package

我正准备一个包含第三方编译可执行文件的R包。计划是使用system()调用将其与R连接。我有权分发这个可执行文件,但不是它的源代码。不幸的是,它仅在Windows 32位下编译,并且不可能在不同的体系结构下轻松地重新编译它。

了解此程序包的受众人数有限,应如何分发可执行文件?我也认识到CRAN不会因此而被允许。

例如,如果可执行文件包含在软件包安装的/ bin /子文件夹中,或者应该在软件包本身安装时以某种方式下载可执行文件。

此外,在这种情况下,如果有任何许可问题,我会面临什么?

2 个答案:

答案 0 :(得分:9)

我已经处理了两个类似这样的程序包,这两个程序包都托管在R-forge上,因为CRAN二进制限制(顺便说一下,这对我来说似乎是非常明智的)。 (我不认为你错过了任何明显的问题 - 只是在这里说我选择做什么。)

  • cpcbp包(公共主要组件/反投影)使用由Patrick Phillips编写的代码编译的二进制文件;源代码是不可归因的,因为它使用了一些 Numerical Recipes 例程。我一直想在R中重写这个核心(它只是简单的数值线性代数,它不会那么难)。在我看来,我可能不得不修改这个版本的许可证 - 我可能会说“GPL”但我不认为我可以实际做到这一点,因为不可分发的组件......
  • glmmADMB包使用可自由再分发的源代码(BSD许可证),但工具链非常复杂,我不希望用户必须下载整个支持包

在这两种情况下,我都将二进制文件放在inst/bin中,并且可能放在特定于体系结构的子目录下(它们安装在/bin中)并使用适当的逻辑来检测体系结构并运行正确的二进制文件。 / p>

我认为原则上你可以通过将不可再发行的部分变成下载(如你所说)来解决无法通过GPL许可的问题,但这似乎违反了精神......

答案 1 :(得分:3)

Ben Bolker提出的方法也被CRAN软件包" dismo" - 要使函数maxent()有效,您必须下载maxent java二进制文件并将其放入主包文件夹中的相应子目录中。