RCPP未加载boost / asio.hpp
作者:互联网
我想包括Boost库中的一些功能.但是,当包含#include< boost / asio.hpp>时,该文件将无法编译,请参见我的示例:
// [[Rcpp::depends(BH)]]
#include <Rcpp.h>
#include <boost/asio.hpp>
// [[Rcpp::export]]
int main()
{
return 0;
}
Error in dyn.load(“/tmp/RtmpRZlOEQ/sourceCpp-x86_64-pc-linux-gnu-0.12.14/sourcecpp_c4a63bcd586/sourceCpp_32.so”) :
unable to load shared object ‘/tmp/RtmpRZlOEQ/sourceCpp-x86_64-pc-linux-gnu-0.12.14/sourcecpp_c4a63bcd586/sourceCpp_32.so’:
/tmp/RtmpRZlOEQ/sourceCpp-x86_64-pc-linux-gnu-0.12.14/sourcecpp_c4a63bcd586/sourceCpp_32.so: undefined symbol: _ZN5boost6system15system_categoryEv
删除#include< boost / asio.hpp>时,一切正常.将asio.hpp替换为其他文件,例如integer.hpp都可以正常工作.
这是我的session.Info():
sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS
Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=de_DE.UTF-8 LC_COLLATE=en_GB.UTF-8 LC_MONETARY=de_DE.UTF-8
[6] LC_MESSAGES=en_GB.UTF-8 LC_PAPER=de_DE.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.3 magrittr_1.5 rsconnect_0.8.5 tools_3.4.3 yaml_2.1.15 Rcpp_0.12.14 stringi_1.1.6 knitr_1.17
[9] stringr_1.2.0 BH_1.65.0-1
我也在Windows 10上尝试过,也无法加载.
通过g编译时,一切正常:
// test.cpp
#include <boost/asio.hpp>
int main()
{
return 0;
}
g test.cpp -lboost_system
解决方法:
是的,就是这样.让我解释一下,继续阅读,为您找到解决方案.
套餐BH
该软件包是仅标头的.没有链接.这样一来,您(作为软件包作者或用户)不必麻烦-lboost_system,而这很快会困扰整个系统.
等一下
对. BH仅是标头.因此不包括所有Boost,因为没有链接就无法全部拥有.例如.没有阿西欧
再说一次?没有阿西欧?
对.标准Boost版本导致需要Asio进行链接.这与我们的BH工作方式不兼容.
伤心
不要怕.在某个时候,我发现Asio作者还将其捆绑为第二种方式,即仅标头.因此,只需将我的CRAN软件包AsioHeaders和BH一起使用即可.
标签:boost,rcpp,linux,r 来源: https://codeday.me/bug/20191025/1929090.html