首页 > 解决方案 > 在 R 服务器上安装 rcpp 包时遇到问题 - Suse 12 SP3 - R-3.3.2

问题描述

我对 R 语言很陌生。作为一名管理员,我正在设置一个 rserver 并安装所需的软件包,以便将此 R 服务器与 SAP HANA 1.0 一起使用。

这里的根本问题是当我安装 rcpp.0.12.16 并收到以下错误时。g++ 是 4.8-6.189。

我正在使用的操作系统版本 R 版本和 rccp 包是否存在不兼容性?请帮助解决这个问题。

> setwd("/Media/R/R_indep_pack")
> install.packages("Rcpp_0.12.16.tar.gz",repos = NULL, type="source")
* installing *source* package ‘Rcpp’ ...
** package ‘Rcpp’ successfully unpacked and MD5 sums checked
** libs
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c Date.cpp -o Date.o
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c Module.cpp -o Module.o
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c Rcpp_init.cpp -o Rcpp_init.o
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c api.cpp -o api.o
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c attributes.cpp -o attributes.o
g++ -I/usr/local/lib64/R/include -DNDEBUG -I../inst/include/ - 
I/usr/local/include    -fPIC   -c barrier.cpp -o barrier.o
g++ -L/usr/local/lib64/R/lib -L/usr/local/lib64 -o Rcpp.so Date.o Module.o 
Rcpp_init.o api.o attributes.o barrier.o -L/usr/local/lib64/R/lib -lR
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/crt1.o: In function 
`_start':
/home/abuild/rpmbuild/BUILD/glibc-2.22/csu/../sysdeps/x86_64/start.S:114: 
undefined reference to `main'
collect2: error: ld returned 1 exit status
/usr/local/lib64/R/share/make/shlib.mk:6: recipe for target 'Rcpp.so' failed
make: *** [Rcpp.so] Error 1
ERROR: compilation failed for package ‘Rcpp’
* removing ‘/usr/local/lib64/R/library/Rcpp’
Warning message:
In install.packages("Rcpp_0.12.16.tar.gz", repos = NULL, type = "source") : 
  installation of package ‘Rcpp_0.12.16.tar.gz’ had non-zero exit status
>

标签: r

解决方案


您的链接器正在寻找一个main函数,因为它没有被告知要构建一个共享库:

g++ -L/usr/local/lib64/R/lib -L/usr/local/lib64 -o Rcpp.so Date.o Module.o 
Rcpp_init.o api.o attributes.o barrier.o -L/usr/local/lib64/R/lib -lR

命令行中缺少a -shared。此处使用的命令行标志是通过Makevars文件定义的:

$ grep SHLIB.*LDFLAGS $(R RHOME)/etc/Makeconf
SHLIB_CXXLDFLAGS = -shared
SHLIB_CXX98LDFLAGS = -shared
SHLIB_CXX11LDFLAGS = -shared
SHLIB_CXX14LDFLAGS = -shared
SHLIB_CXX17LDFLAGS = -shared
SHLIB_FCLDFLAGS = -shared
SHLIB_LDFLAGS = -shared# $(CFLAGS) $(CPICFLAGS)
SHLIB_LINK = $(SHLIB_LD) $(SHLIB_LDFLAGS) $(LIBR0) $(LDFLAGS)
SHLIB_CXX1XLDFLAGS = -shared

这些在您的系统上设置不正确,或者您通过~/.R/Makevars.


推荐阅读