我正在尝试在 RInside 包的标准示例存储库中编译示例。我已经尝试运行已经在存储库中的 Makefile,但没有用。到目前为止,我遇到了几个错误,其中一些已经解决了。问题是,每次我解决一个错误时,都会发生两件事之一,它会出现一个新的错误或一个旧的错误再次出现。这是具有相应错误的不同生成文件的代码:
1) 没有 -L 的 Makefile
all:
g++ -I/usr/share/R/include -I/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include -I/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/RInside/include rinsidetest.cpp
正如预期的那样,对这个文件应用 make 会返回关于未定义的 RInside::'s 引用的错误
undefined reference to `RInside::RInside(int, char const* const*, bool, bool, bool)'
2) 带有 -L 链接的 Makefile
all:
g++ -I/usr/share/R/include -I/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/include -I/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/RInside/include -L/usr/lib/R/site-library/RInside/lib -L/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/libs -lRInside -lRcpp -L/usr/lib/R/lib -lR -Wl,-rpath,/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/Rcpp/libs -lRInside -Wl,-rpath,/home/manuel/R/x86_64-pc-linux-gnu-library/3.4/RInside/lib rinsidetest.cpp
错误是这样的:
/usr/bin/ld: cannot find -lRcpp
原来libs库中的.so文件被命名为Rcpp.so,所以我把它重命名为libRcpp.so
,错误就消失了。
3)在重命名后Rcpp.so
,libRcpp.so
我将 make 应用到第 2 点的相同 makefile)并且错误再次与未定义的 RInside::: 引用有关
rinsidetest.cpp:(.text+0x100): undefined reference to `RInside::RInside(int, char const* const*, bool, bool, bool)
4)将make应用于文件夹中已经存在的makefile
make -f Makefile
错误(更改R_LIBS_USER
为
R_LIBS_USER := "/home/manuel/R/x86_64-pc-linux-gnu-library/3.4"
曾是:
fatal error: RInside.h: No such file or directory
compilation terminated.
到目前为止,我已经阅读了有关在 C++ 中包含标头的更多一般问题,以及一些专门关于 RInside 的问题,其中一些问题由编写包的 Dirk Eddelbuettel 回答,但所有答案都与使用-L<path>/include
我几乎可以肯定我使用正确的链接器。
这是我到目前为止读到的一些问题:
在 Linux 上使用 g++编译 RInside 程序 在 Linux 上使用 g++ 编译 RInside 程序
http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2012-May/003829.html
http://rcpp-devel.r-forge.r-project.narkive.com/A70U2nVw/problem-with-rinside-hello-world-example
我正在使用带有 R 版本 3.4.4 的 Ubuntu 16.04。任何帮助将不胜感激!