安装R包udunit2遇共享.so文件缺失错误,求可行解决路径
解决R包udunits2安装时找不到共享对象文件的问题
我之前碰到过一模一样的情况!这大概率是R编译安装包时没法定位到udunits2的库文件——虽然命令行工具能正常跑,但R的环境变量没同步配置好,再加上你用了自定义的R包目录,得稍微调整下配置。下面是一步步的可行解决路径:
第一步:确认udunits2的库和头文件位置
先搞清楚你的udunits2实际安装路径:
- 找二进制文件位置:运行
which udunits2,如果输出是/usr/local/bin/udunits2,那对应的库一般在/usr/local/lib,头文件在/usr/local/include/udunits2 - 直接查库的绝对路径:运行
ldconfig -p | grep libudunits2,会列出libudunits2.so.0的具体位置,比如libudunits2.so.0 (libc6,x86-64) => /usr/local/lib/libudunits2.so.0
记好这两个关键路径:库目录(比如/usr/local/lib)和头文件目录(比如/usr/local/include/udunits2)。
第二步:给R配置udunits2的环境变量
R安装udunits2包时需要明确这两个路径,有两种配置方式:
临时配置(单次生效)
打开R终端,先设置环境变量再安装:
# 替换成你实际的库目录和头文件目录 Sys.setenv(UDUNITS2_LIBS = "/usr/local/lib") Sys.setenv(UDUNITS2_INCLUDE = "/usr/local/include/udunits2") # 指定安装到你的自定义目录 install.packages("udunits2", lib = "/srv/shiny-server/r-packages")
永久配置(每次启动R自动生效)
编辑R的环境配置文件~/.Renviron(如果没有就新建一个),添加两行:
UDUNITS2_LIBS="/usr/local/lib" UDUNITS2_INCLUDE="/usr/local/include/udunits2"
保存后重启R,再运行install.packages("udunits2", lib = "/srv/shiny-server/r-packages")即可。
第三步:确保自定义R包目录被R识别
如果你希望R默认优先使用/srv/shiny-server/r-packages,可以把这个目录加到R的库路径里:
.libPaths(c("/srv/shiny-server/r-packages", .libPaths()))
也可以把这行代码加到~/.Rprofile里,每次启动R自动加载这个配置。
额外排查:更新动态链接库缓存
如果上面的步骤还没解决问题,可能是系统的动态链接库缓存没更新,运行:
sudo ldconfig
更新完成后再重新尝试安装udunits2包。
最后验证一下:安装成功后在R里运行library(udunits2),如果没有报错就说明问题搞定啦!
内容的提问来源于stack exchange,提问作者William Doane
相关产品推荐
相关产品推荐

