【发布时间】: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