【问题标题】:RInside segmentation fault and linking issueRInside 分段错误和链接问题
【发布时间】:2012-10-13 02:12:12
【问题描述】:

我正在尝试通过 RInside 从 linux 上的 c++ 调用 R,我使用 gcc 版本 4.5.3 (Debian 4.5.3-1) 从源代码编译 R-2.15.1,我没有 sudo 使用权限apt-get 安装。我正在使用 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)也安装良好..

但是,当我使用给定的 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

【问题讨论】:

    标签: c++ r rinside


    【解决方案1】:

    几件事:

    1. 请提供可重现的示例

    2. 您的设置不标准

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

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

    这可能就像调整 Makefile / Makevars 文件一样简单,以确保您在所有情况下都能获得您的库。但我们无法确定,因为这里没有可重现的内容。

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

    【讨论】:

    • 我认为这只是一个简单的链接问题,因为所有软件包都安装得很好,问题是我只能从源代码安装所有内容是否有建议的 blas/lapack 库我应该使用?跨度>
    • 我没有apt-get的root权限
    【解决方案2】:

    我通过将 R 安装路径库 ../R/lib: 添加到 LD_LIBRARY_PATH 的开头来解决问题,之后所有示例都编译并运行良好

    【讨论】:

    • 很高兴知道。我认为更新/编辑问题以添加新答案更为常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2022-09-23
    • 1970-01-01
    • 2010-12-03
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多