我正试图通过RInside从linux上的c ++调用R,我使用gcc版本4.5.3(Debian 4.5.3-1)从源代码编译R-2.15.1,我没有使用sudo权限apt-get install。我正在使用OpenBlas和系统优化的lapack。 blas和lapack库适用于许多scalapack应用程序
我用
安装了R../configure --with-blas="-I/lib/OpenBLAS-v0.2.3-0/xianyi-OpenBLAS-48f075c/install/include -L/lib/OpenBLAS-v0.2.3-0/xianyi-OpenBLAS-48f075c/install/lib -lopenblas -lgfortran" --with-lapack="/usr/lib/liblapack.so -lgfortran" --enable-BLAS-shlib=yes --enable-R-shlib --enable-R-static-lib --prefix= .
安装并运行正常,我运行make检查没有错误,所有的包(Rcpp和RInside)安装正常..
然而,当我使用给定的RInside makefile
时,来自/standard/rinside_sample0.cpp
的基本hello world示例编译!但它没有运行,我得到以下错误
./rinside_sample0: error while loading shared libraries: libRblas.so: cannot open shared object file: No such file or directory
文件libRblas.so
存在且位于R/lib
文件夹
当我尝试手动将其与g ++命令链接时,make文件创建或链接如下我得到分段错误
/R/lib/libRblas.so ./hello_world
Segmentation fault
编辑:下面是示例make文件如何尝试编译示例(编译正常)但不会运行上面遗漏的libRblas.so
错误
g++ -I/nfs/user03/jimmie21/libs/lib64/R/include -I/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/include -I/nfs/user03/jimmie21/libs/lib64/R/library/RInside/include -g -O2 -Wall -I/usr/local/include hello_world.cpp -L/nfs/user03/jimmie21/libs/lib64/R/lib -lR -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRblas -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRlapack -L/nfs/user03/jimmie21/libs/lib64/R/lib -lRblas -L/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/lib -lRcpp -Wl,-rpath,/nfs/user03/jimmie21/libs/lib64/R/library/Rcpp/lib -L/nfs/user03/jimmie21/libs/lib64/R/library/RInside/lib -lRInside -Wl,-rpath,/nfs/user03/jimmie21/libs/lib64/R/library/RInside/lib -o hello_world
答案 0 :(得分:3)
一些事情:
可重复的例子,
您有非标准设置
使用1)中的脚本,在标准设置上尝试,因为Rcpp / RInside是如何开发和测试的(在Ubuntu / Debian上)
Rcpp测试套件现在包含来自大约350个单元测试功能的近800个单元测试。这些不是seg.fault,所以问题就在你的最后。同样,RInside在四个examples/
子目录中有几十个例子。这也有效。
可能就像调整Makefile / Makevars文件一样简单,以确保在所有情况下都能获得库。但我们无法分辨,因为这里没有任何可复制的内容。
编辑如果你想与libRblas.so
链接,那么你有一个完全非标准设置作为Debian / Ubuntu的R包使用外部BLAS。再次,不是一个RInside问题。
答案 1 :(得分:1)
我通过将R安装路径lib ../R/lib:
添加到LD_LIBRARY_PATH
的开头来修复了问题,之后所有示例都已编译并运行正常