目录
CRAN-Package rgdal
根据CRAN所述,rgdal库被移除。
方式1:conda-forge安装
conda-forge / packages / r-rgdal
错误:缺乏libnsl.so.1
在加载rgdal库,执行以下命令时:
installed <- installed.packages()
"rgdal" %in% rownames(installed)
报错,遇到的问题是:
library(rgdal) 加载失败,报错提示缺少共享库文件:
libnsl.so.1: cannot open shared object file: No such file or directory
这是一个典型的 系统动态链接库缺失(或路径未配置)问题,但完全可以解决 ✅。
🔍 问题分析
- rgdal.so 动态库在加载时依赖 libnsl.so.1。
- 这是一个 系统级别的网络库(libnsl = “Network Services Library”)。
- 它不属于 R 或 rgdal 包,而是由操作系统提供,通常在 Linux 上由 glibc 系统库安装。
✅ 方法一:查找系统中是否已有此库
在终端中运行:
find /lib /usr/lib /lib64 /usr/lib64 -name "libnsl.so*"
或者用更快的方式:
locate libnsl.so
情况 A:如果找到了 libnsl.so.1,例如路径为:
/usr/lib64/libnsl.so.1
那么你可以创建一个软链接到你的 Conda 环境中:
ln -s /usr/lib64/libnsl.so.1 ~/miniconda3/envs/r_env/lib/libnsl.so.1
确保 R 能找到这个库时可以加载 rgdal。
替补方案:采用libnsl.so.3链接 libnsl.so.1
创建软链接模拟 libnsl.so.1,进入 Conda 的 lib 目录:
cd /home/wanzhou/miniconda3/envs/r_env/lib
ln -s libnsl.so.3 libnsl.so.1
创建一个名为 libnsl.so.1 的链接,指向已有的 libnsl.so.3。
📌 注意事项
这种方式虽然是“绕过法”,在大多数情况下是安全的,特别是 libnsl.so.1 和 .so.3 基本兼容。
如果你要部署到生产环境,建议尽量使用与 rgdal 相匹配的系统动态库(例如:安装真正的 libnsl.so.1,或使用更兼容的 Conda 包构建)。
✅ 方法二:系统中没有安装 libnsl.so.1 → 手动安装
如果你有 sudo 权限(推荐):
CentOS / RHEL:
sudo yum install libnsl
Ubuntu / Debian:
sudo apt-get install libnsl1
✅ 方法三:使用 Conda 安装 libnsl
如果你 没有 sudo 权限,可以通过 Conda 安装 libnsl:
conda activate r_env
conda install -c conda-forge libnsl
conda list libnsl
这会自动将 libnsl.so.1 安装到你的 Conda 环境中,并由 Conda 管理,无需手动软链接。
🧪 验证是否解决
安装或软链接完成后,在 R 中重新尝试加载:
library(rgdal)
如果不再报 libnsl.so.1 错误,说明问题已解决 ✅
方式2:手动安装
cd /home/wanzhou/Packages/
🧱 步骤一:激活 Conda 环境
source ~/miniconda3/bin/activate r_env
📥 步骤二:下载并编译 PROJ
mkdir -p ~/src && cd ~/src
wget https://download.osgeo.org/proj/proj-9.3.1.tar.gz
tar -xzf proj-9.3.1.tar.gz
cd proj-9.3.1
./configure --prefix=$HOME/local
./configure --prefix=/home/wanzhou/Packages/r_local
make -j$(nproc)
make install