Travis CI 使用 C++、Rcpp 和 RcppArmadillo 的 R 包构建错误



这是我的 R 包的 GitHub 存储库

我已经能够从Windows,MacOS和Linux集群上的源代码安装此软件包

,并具有devtools::install_github("ntthung/ldsr")

我正在尝试集成Travis CI,并且在构建时出现以下错误

错误:dyn.load(file, DLLpath = DLLpath, ...( 中的"ldsr"的包或命名空间加载失败:无法加载共享对象 '/tmp/RtmpK7z3X6/Rinst2ef05609c709/00LOCK-ldsr/00new/ldsr/libs/ldsr.so':/

tmp/RtmpK7z3X6/Rinst2ef05609c709/00LOCK-ldsr/00new/ldsr/libs/ldsr.so:未定义的符号:dpotrf_

我发现dpotrf_属于一个名为libflame的图书馆。所以我使用 te 命令Sys.setenv("PKG-LIBS"="-llibflame")Rload.R文件,并将以下内容添加到.travis.yml

script:
- Rscript Rload.R
- R CMD build . --compact-vignettes=gs+qpdf
- R CMD check *tar.gz --as-cran

但我仍然收到同样的错误。

我的软件包使用Rcpp和Rcpp犰狳。

请帮忙!谢谢。

这看起来像是没有正确src/Makevars的基本错误,就像从例如RcppArmadillo.package.skeleton()和其他人中创建的那样。

因此,作为第一次基本修复尝试,请从 RcppArmadillo 复制文件 inst/skeleton/Makevars,其中包含

## With R 3.1.0 or later, you can uncomment the following line to tell R to 
## enable compilation with C++11 (where available)
##
## Also, OpenMP support in Armadillo prefers C++11 support. However, for wider
## availability of the package we do not yet enforce this here.  It is however
## recommended for client packages to set it.
##
## And with R 3.4.0, and RcppArmadillo 0.7.960.*, we turn C++11 on as OpenMP
## support within Armadillo prefers / requires it
CXX_STD = CXX11
PKG_CXXFLAGS = $(SHLIB_OPENMP_CXXFLAGS) 
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

您确实复制了Windows变体Makevars.win只是忘记了主要的变体。

dpotrf_是一个标准的LAPACK符号,因此对于更有经验的用户来说,错误是显而易见的(这个问题也可能是重复的(。此外,查看使用 RcppArmadillo 的 600+ 其他 CRAN 包的来源通常也是一个好主意——它们都在 GitHub 的用户cran

最新更新