CentOS7共享集群安装R语言sf包报非零退出状态问题咨询
CentOS7共享集群安装R语言sf包udunits2依赖报错处理
问题现状
- 运行环境:搭载CentOS7操作系统的高校共享集群,使用R语言环境
- 异常表现:仅在安装
sf(simple features,简单特征)包时出现配置阶段失败 - 已执行操作:
- 参考R包安装时传入配置参数的通用方法,尝试为安装过程指定udunits2头文件路径,执行命令为:
install.packages('sf',configure.args=c(sf="--with-udunits2-include=/usr/include/udunits2")) - 已向集群管理员确认,udunits2的头文件安装路径为
/usr/include/udunits2/
- 参考R包安装时传入配置参数的通用方法,尝试为安装过程指定udunits2头文件路径,执行命令为:
- 安装报错输出:
配置失败,原因是未找到libudunits2.so
系统附带的依赖排查提示:- Debian/Ubuntu系发行版需安装
libudunits2-dev - Fedora/EPEL系发行版需安装
udunits2-devel - macOS(OSX)环境可通过brew安装udunits
若udunits2安装在非标准路径,可通过以下方式手动指定配置: - 传入
--with-udunits2-lib=库文件所在目录参数指定共享库路径 - 传入
--with-udunits2-include=头文件所在目录参数指定头文件路径 - 手动设置
UDUNITS2_INCLUDE与UDUNITS2_LIBS环境变量完成配置
- Debian/Ubuntu系发行版需安装
问题根源
此前的安装配置仅传入了udunits2的头文件路径,未指定libudunits2.so共享库的存放目录。sf包的编译配置脚本需要同时匹配对应版本的头文件和共享库才能通过环境检查,因此触发未找到库文件的报错。
操作步骤
- 先在集群终端查找
libudunits2.so的实际存放路径,执行命令:find / -name "libudunits2.so" 2>/dev/null
记录命令输出的文件路径,提取其所在的目录路径(例如输出为/usr/lib64/libudunits2.so,则对应目录为/usr/lib64)。
注意:如果find命令输出多个libudunits2.so路径,优先选择与/usr/include/udunits2头文件版本对应的同版本库文件路径,避免出现版本不匹配的编译问题。 - 方式一:直接在安装命令中同时传入头文件和库文件路径,执行安装:
install.packages('sf', configure.args = c(sf = "--with-udunits2-include=/usr/include/udunits2 --with-udunits2-lib=上一步查到的库所在目录路径")) - 方式二:通过环境变量指定路径后再执行安装,可规避配置参数传递不生效的问题:
Sys.setenv(UDUNITS2_INCLUDE = "/usr/include/udunits2") Sys.setenv(UDUNITS2_LIBS = "上一步查到的库所在目录路径") install.packages('sf')
内容的提问来源于stack exchange,提问作者Chila Inocencio
相关产品推荐
相关产品推荐

