【问题标题】:Undefined reference error while linking to R and RInside libraries from C++ code using g++ compiler in UNIX在 UNIX 中使用 g++ 编译器从 C++ 代码链接到 R 和 RInside 库时出现未定义的引用错误
【发布时间】:2011-06-08 14:37:07
【问题描述】:

我想将 R 嵌入到 C++ 程序中。所以我也安装了 R、Rcpp 和 RInside。但是在 UNIX 中使用 g++ 编译时出现很多“未定义的引用”错误。我给出的编译命令是

g++ -I/path/to/R/include -I/path/to/Rcpp/include -I/path/to/RInside/include -L/path/to/R/libs -L/path/to /Rcpp/libs -L/path/to/RInside/libs test.cpp -lRlapack -lRcpp -lRblas -lRInside"

test.cpp:

#include <RInside.h>                   
int main(int argc, char *argv[]) {
    RInside R(argc, argv);              // create an embedded R instance
    R["txt"] = "Hello, world!\n";   // assign a char* (string) to 'txt'
    R.parseEvalQ("cat(txt)");           // eval the init string, ignoring any returns
    exit(0);
}

错误:

Undefined reference to R_ClassSymbol
Undefined reference to R_NilValue

我收到与 R 变量类似的 110 个未定义错误。我已将 R 和其他软件包安装到我自己的位置而不是默认位置。我现在被这个错误困扰了 2 天。我似乎做的一切都是正确的,比如链接等。 提前致谢。

【问题讨论】:

    标签: c++ r g++ rcpp rinside


    【解决方案1】:

    (在正确输入代码后更新,以便我可以阅读!)

    有关一些有用的示例,请参阅 http://dirk.eddelbuettel.com/code/rinside.html

    【讨论】:

    • 对不起。我再次以正确的格式重新发布了问题
    【解决方案2】:

    RInsideexamples/standard/ 目录中附带了十多个示例(还有更多用于 MPI 的示例,您现在可以忽略)。尝试构建这些,并尝试从他们的 Makefile 进行调整。

    您的链接错误消息指向 R 中缺少的符号——并且您显示的命令缺少 -lR 部分。尝试使用(工作)示例作为指导添加它。

    【讨论】:

    • 上面的代码来自那个目录。这是一个简单的“hello world”程序。R 的 lib 目录包含 libRlapack.so 和 libRblas.so。这就是我给出 -lRlapack 和 -lRblas 的原因。树中没有 libR 文件。
    • 你从哪里得到 R? R 本身需要使用 --enable-R-shlib 选项构建。
    • 我是从 CRAN 网站获得的。我没有使用 --enable-R-shlib 选项构建它。我做了一个简单的./configure,然后make,make install。也将尝试使用此选项
    • 如果您使用的是 Ubuntu 或 Debian,请尝试使用 CRAN 提供的预构建 R 包。
    • 预构建的 R 包?在他们的网站上没有看到。将重新安装所有内容。我在 RHEL 上。
    【解决方案3】:

    终于明白了....在另一个系统中使用 -enable-R-shlib 重新安装了所有内容。示例工作正常。我现在可以继续进行一些实现了。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多