【问题标题】:Is it possible to build an R package, which use Rcpp and Boost.Thread, on [win-builder](http://win-builder.r-project.org/)?是否可以在 [win-builder](http://win-builder.r-project.org/) 上构建使用 Rcpp 和 Boost.Thread 的 R 包?
【发布时间】:2013-10-29 07:17:09
【问题描述】:

最近,我做了一个 R 包,它使用 Rcpp 来集成 R 和 C++。 C++ 库 Boost 用于多线程。我想知道我的包是否可以在http://win-builder.r-project.org/ 上构建?

发现定义了一个Make变量---BOOSTLIB---,如http://cran.r-project.org/bin/windows/contrib/ThirdPartySoftware.html所示。

我尝试使用纯头文件库,没关系,但是当我尝试使用单独编译的库 Boost.Thread 时,出现“没有这样的文件”或“未定义的引用”错误。也许lib路径是错误的。但是,我几乎找不到任何关于 win-builder 的解释。我可以只使用仅限头文件的库还是有办法配置 Makevars.win 以找到单独编译的 Boost.Thread 库?

或者也许我可以在我的包中包含 Boost 源文件,但我认为这不是一个好方法,我也不知道如何包含(我没有尝试过)。

我发现有一个 R 包 BH 试图为 R 提供 Boost。它非常有帮助,我非常感谢 BH 的作者所做的工作,但是,当我问这个时,Boost.Thread 不包括在内题。也许我可以等到它们包含 Boost.Thread。但我现在更喜欢自己做,所以我可以学到更多。

【问题讨论】:

  • Boost.Thread 不太可能包含在 BH 中。 BH 仅用于标头库。
  • 每个标题都不是“库”。它们是您包含在您自己的代码中的一些代码。另一方面,Boost 线程是二进制库,或编译后的代码。要使用它,您不仅需要包含相关的 boost/thread 头文件,还需要链接到实际的库文件。如果你不链接它,你最终会得到未定义的引用。
  • @RomainFrancois:谢谢。
  • @BenJ:谢谢,但是我可以在 Makevars.win 中为win-builder 上的 Boost.Thread 二进制文件指明任何变量吗?
  • 我没有使用 win-builder 的经验,但从您发布的第二个链接来看,您可能已经猜到了,您可能需要将 BOOSTLIB 设置为 boost 库的路径文件(通常在 path/where/boost/is/installed/lib/ 中找到)。我建议您首先安装最新版本的 boost。

标签: c++ multithreading r boost rcpp


【解决方案1】:

当前BH 维护者在这里。几点:

  • 如前所述,我们的BH 包仅提供来自 Boost 的(一部分)标头。该软件包根据需要增加,我们可能会尽快添加更多(因为我有一个请求)。

  • Win-Builder 支持BOOSTLIB 也可以在 Windows 上设置标题;正如 cmets 所说,我认为它不提供库。在RQuantLib 中,我只使用它来获取 QuantLib 类所需的标题。

  • 几个包已经解决了 Windows 上的线程问题; BH 的共同作者 Jay 和 Mike 在他们的 bigmemory 包及其支持包的上下文中进行了尝试,例如 synchronicity。但截至目前,它们还没有提供 Windows 支持,因为 Windows 是不同的,并且遇到了一些 Unix 习惯用法。

编辑:这是来自synchronicityREADME

目前仅在 unix 平台上支持同步性,因为 在 64 位 Windows 的 Boost 或 MinGW 中存在错误。我们将展开 解决这些问题后立即支持 Windows。

如果你想在 32 位 Windows 上使用这个包,它可能是 可能(注释掉DESCRIPTION中的OS_type行)。

2010 年 10 月 30 日。修改配置以修复 Solaris 问题。

不,简而言之,没有预建工具供您依赖。

【讨论】:

  • 非常感谢。这很有帮助。我注意到 bigmemorysynchronicity 有一个字段 OS_type 来指示它们在 Unix 上的用途。换句话说,如果我想在 CRAN 上上传我的包,我只需要提供 Unix 版本的 R 包?
  • 我知道R核心团队提供的Rtools。如果我使用 Rtools 编译 Boost.Thread 和其他相关的 Boost 源文件(虽然我不知道如何),然后将生成的二进制文件与我的 C++ 源文件和 Makevars.win 中的相应配置一起打包到win-builder,有可能吗?还是 R 规则禁止这样做?
  • @Simon:Q1:是的。看看同步性,因此 bigmemory 做了什么。还有更多仅适用于 Unix 或仅适用于 Windows 的软件包。 OS_type 记录在 WRE 手册中。 Q2:我想,但 r-devel 可能比这个评论框更适合讨论。最后,如果您发现这很有用,自定义是赞成和/或接受(分别单击向上箭头和刻度线)。
  • 非常感谢。我很高兴在 r-devel 见到您与您讨论。我发现点赞需要 15 个声望。
  • 快到了:现在你有代表 15 了 :) 在 r-devel 上见,在 rcpp-devel 上见 Rcpp(可能还有 Rcpp + Boost)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多