RInside分段故障和链接问题

时间:2012-10-12 17:20:10

标签: c++ r rinside

我正试图通过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

2 个答案:

答案 0 :(得分:3)

一些事情:

  1. 可重复的例子,

  2. 您有非标准设置

  3. 使用1)中的脚本,在标准设置上尝试,因为Rcpp / RInside是如何开发和测试的(在Ubuntu / Debian上)

  4. Rcpp测试套件现在包含来自大约350个单元测试功能的近800个单元测试。这些不是seg.fault,所以问题就在你的最后。同样,RInside在四个examples/子目录中有几十个例子。这也有效。

  5. 可能就像调整Makefile / Makevars文件一样简单,以确保在所有情况下都能获得库。但我们无法分辨,因为这里没有任何可复制的内容。

    编辑如果你想与libRblas.so链接,那么你有一个完全非标准设置作为Debian / Ubuntu的R包使用外部BLAS。再次,不是一个RInside问题。

答案 1 :(得分:1)

我通过将R安装路径lib ../R/lib:添加到LD_LIBRARY_PATH的开头来修复了问题,之后所有示例都已编译并运行正常