CentOS Linux 7.4下无法安装R包httpuv求助
这个错误的根源很明确:libtool对链接器参数的格式要求非常严格,它不允许-L(用于指定库搜索路径的参数)和后面的路径之间存在空格。从报错信息看,你的环境里的LDFLAGS变量中存在-L /n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/lib这种带空格的格式,而正确的写法应该是-L/n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/lib,这种格式错误导致编译httpuv依赖的libuv库时触发了libtool的报错。
下面是具体的解决步骤:
第一步:检查当前环境的LDFLAGS参数
先在终端里运行这条命令,确认问题:echo $LDFLAGS你应该能看到包含空格的
-L /xxx/lib格式的参数。第二步:修正LDFLAGS变量
临时重新导出LDFLAGS,把所有-L和路径之间的空格去掉。比如针对你的场景,运行:export LDFLAGS="-L/n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/lib"如果原来的
LDFLAGS还有其他参数,记得一并保留,只是把带空格的-L项修正格式。第三步:重新安装httpuv包
打开R,尝试从源码重新安装:install.packages("httpuv", type = "source")如果还是遇到问题,可以尝试直接指定pcre的库和头文件路径,避免环境变量干扰:
install.packages("httpuv", type = "source", configure.args = c( "--with-pcre-lib=/n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/lib", "--with-pcre-include=/n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/include" ))注意要确认pcre的include路径是否正确,通常它和lib目录同级。
额外提示(针对集群环境)
从路径来看你可能在Helmod集群上操作,这种情况下可以先加载正确的pcre模块,再安装:module load pcre/8.37-fasrc02加载模块后再检查
LDFLAGS,确认参数格式正确后再启动R安装httpuv。
如果临时导出环境变量不生效,也可以直接在R内部设置环境变量:
Sys.setenv(LDFLAGS = "-L/n/helmod/apps/centos7/Core/pcre/8.37-fasrc02/lib") install.packages("httpuv", type = "source")
内容的提问来源于stack exchange,提问作者user321627

