Suse 12 SP3环境下R-3.3.2安装Rcpp_0.12.16包失败求助
解决Rcpp_0.12.16编译链接错误(undefined reference to `main')
首先可以明确:你的R版本、g++4.8和Rcpp_0.12.16之间不存在核心兼容性问题。Rcpp 0.12.16支持R 3.0.0及以上版本,而g4.8已经满足该版本Rcpp对C11特性的最低要求,SAP HANA 1.0适配的R 3.x系列也完全兼容这个组合。
你遇到的错误是链接阶段的参数配置问题:g++在生成R共享库(.so文件)时,没有正确使用-shared参数,导致编译器默认寻找main函数(这是生成可执行程序的要求,而非共享库)。
下面是具体的解决步骤:
1. 临时设置环境变量修复链接参数
在安装Rcpp之前,先在终端中设置环境变量,强制R使用正确的共享库链接参数:
export SHLIB_LDFLAGS='-shared'
然后回到R环境中重新执行安装命令:
setwd("/Media/R/R_indep_pack") install.packages("Rcpp_0.12.16.tar.gz", repos = NULL, type="source")
2. 检查R关联的编译器是否正确
确认R使用的编译器确实是你的g++4.8:
在R中执行:
Sys.getenv("CXX")
或者在终端执行:
R CMD config CXX
如果输出不是g++或指定的g++4.8路径,需要修改R的配置文件,指定正确的编译器。
3. 永久修改R的编译配置文件
如果临时环境变量的方法无效,可以修改R的全局或用户级编译配置:
- 用户级:创建或编辑
~/.R/Makevars文件,添加以下内容:CXX = g++ SHLIB_CXXFLAGS = -fPIC SHLIB_LDFLAGS = -shared - 全局级:编辑
/usr/local/lib64/R/etc/Makeconf,找到SHLIB_LDFLAGS相关行,确保包含-shared参数。
保存配置后,重新尝试安装Rcpp即可。
额外验证
如果你担心版本兼容性,可以先确认你的R版本:在R中执行version,只要是3.0.0及以上,就符合Rcpp_0.12.16的要求。SAP HANA 1.0通常推荐R 3.2.x到3.6.x版本,这个区间和Rcpp_0.12.16完全兼容。
内容的提问来源于stack exchange,提问作者Phani Teluguti
相关产品推荐
相关产品推荐

