使用来自另一个包的少量C ++级代码

时间:2016-07-04 15:18:19

标签: c++ r

有一个R包定义了一些方便的函数,用于将文件从zip存档中提取到C ++中的std::string。我想在我自己的软件包中使用这些功能,但我无法简单地链接到它们,因为标头不在原始软件包的inst/include目录中。

我的问题是基于我的理解,除非标题位于inst/include中,否则C ++级代码在包外不可用。

要使用该代码,我的选项是:

  1. 请求包维护者将C ++头文件移动到inst/include目录,以便我可以在linkingTo文件中使用DESCRIPTION从我的包中调用它。

  2. 复制并确认代码,这意味着将GPL-3许可证传播到我自己的软件包中。

  3. 复制并毫无意义地更改代码以逃避版权。

  4. 复制代码,大约20行,不要改变它,不要承认它,也不要传播GPL-3许可证。

    < / LI>
  5. 创建一个单独的小包,使我想要的代码在inst/include中可用,向原作者承认,并向自己传播GPL-3许可(但不是我的实际包, includes它)。

  6. 还有其他选择吗?我误解了Writing R ExtensionsRcpp吗?

    澄清:我完全不宽恕选项3和4,在我看来,这是作弊。因此问题。阅读答案的人现在会看到这些事情被视为作弊。但它们是人们在做正确的事情时所考虑的事情。比简单Imports: package更难,这就是我加入它们的原因。

1 个答案:

答案 0 :(得分:4)

唯一可行的选择是选项1和2.

选项1的工作原理是R维护者愿意在GPL以外的许可下为您提供代码 。这当然意味着您将仅针对双重许可代码进行链接,而不是针对所有R链接。

如果您愿意将GPL用于代码以及链接到该代码的所有代码,则选项2有效。

选项3是剽窃的定义,只是不是选项。

选项4是可疑的,不道德的,而且在您公开宣布该选项的情况下也有点难以实现。

选项5不起作用,因为GPL也适用于您的单独包,并且扩展也适用于使用该包的所有代码。