我正在开发一个使用 RcppArmadillo 的 R 包。我正在尝试利用 OpenBLAS 中更快的矩阵乘法。在里面文档 http://arma.sourceforge.net/faq.html#blas_lapack_replacements在 C++ 犰狳库中,它表示如果我们的机器上有 OpenBLAS,那么犰狳将使用 OpenBLAS 而不是 BLAS。但是,当我编译 R 包时,我得到如下信息:
g++ -m64 -std=c++11 -shared -L/usr/lib64/R/lib -Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o PackageTest.so class1.o class2.o class3.o class4.o class5.o class6.o class7.o RcppExports.o class8.o class9.o class10.o -L/usr/lib64/R/lib -lRlapack -L/usr/lib64/R/lib -lRblas -lgfortran -lm -lquadmath -L/usr/lib64/R/lib -lR
所以它正在编译-lRlapack
and -lRblas
选项。我怎样才能正确修改Makevars
and Makevars.win
文件让 RcppArmadillo 使用选项编译包-lopenblas
?我解决这个问题的尝试是修改Makevars
文件的方式如下:
PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)
PKG_CXXFLAGS =-fopenmp -std=c++11 -lopenblas
PKG_CXX1XFLAGS = $(PKG_CXXFLAGS)
该包确实编译了-lopenblas
,但这是最好的方法吗?
这是您的 RedHat 安装的问题,它在安装 R 时选择依赖 R 的内部 LAPACK 源 --- 而且 RcppArmadillo 使用 R 使用的任何内容。
在我的基于 Debian/Ubuntu 的机器上,情况有所不同。即对于
R> library(Rcpp)
R> cppFunction("arma::mat foo(arma::mat x) { return x + x;} ", depends="RcppArmadillo", verbose=TRUE)
我得到(除其他外)
g++ -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions \
-Wl,-z,relro -o sourceCpp_4.so file677111d81351.o \
-fopenmp -llapack -lblas -lgfortran -lm -lquadmath \
-L/usr/lib/R/lib -lR
我们看到-llapack -lblas -lgfortran
正如预期的那样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)