R内部分段故障和链接问题

RInside segmentation fault and linking issue

本文关键字:链接 问题 故障 内部 分段      更新时间:2023-10-16

我正试图通过RInside从linux上的c++调用R,我用gcc 4.5.3版本(Debian 4.5.3-1)从源代码编译了R-2.15.1,我没有使用apt-get-install的sudo权限。我正在使用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 check,没有任何错误,所有软件包(Rcpp和RInside)也安装良好。。

然而,当我使用给定的RInsidemakefile时,/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

两件事:

  1. 可复制的示例,请

  2. 您有一个非标准设置

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

  4. Rcpp测试套件现在包含大约350个单元测试函数中的近800个单元测试。这些没有故障,所以问题就在你这边。类似地,RInside在四个子目录examples/中有几十个例子。这也是有效的。

这可能和调整Makefile/Makevars文件一样容易,以确保在任何情况下都能获得库。但我们无法判断,因为这里没有可复制的东西。

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

我通过在LD_LIBRARY_PATH的开头添加R安装路径库../R/lib:解决了这个问题,之后所有的示例都编译并运行了精细的