服务器手动安装并编译R环境库包:PROJ→RGDAL

目录

  • 方式1:conda-forge安装
    • 错误:缺乏libnsl.so.1
      • [✅ 方法一:查找系统中是否已有此库](#✅ 方法一:查找系统中是否已有此库)
      • [替补方案:采用libnsl.so.3链接 libnsl.so.1](#替补方案:采用libnsl.so.3链接 libnsl.so.1)
      • [✅ 方法二:系统中没有安装 libnsl.so.1 → 手动安装](#✅ 方法二:系统中没有安装 libnsl.so.1 → 手动安装)
      • [✅ 方法三:使用 Conda 安装 libnsl](#✅ 方法三:使用 Conda 安装 libnsl)
  • 方式2:手动安装
    • [🧱 步骤一:激活 Conda 环境](#🧱 步骤一:激活 Conda 环境)
    • [📥 步骤二:下载并编译 PROJ](#📥 步骤二:下载并编译 PROJ)
  • 参考

CRAN-Package rgdal

根据CRAN所述,rgdal库被移除。

方式1:conda-forge安装

conda-forge / packages / r-rgdal

错误:缺乏libnsl.so.1

在加载rgdal库,执行以下命令时:

bash 复制代码
installed <- installed.packages()
"rgdal" %in% rownames(installed)

报错,遇到的问题是:

bash 复制代码
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 系统库安装。

✅ 方法一:查找系统中是否已有此库

在终端中运行:

bash 复制代码
find /lib /usr/lib /lib64 /usr/lib64 -name "libnsl.so*"

或者用更快的方式:

bash 复制代码
locate libnsl.so

情况 A:如果找到了 libnsl.so.1,例如路径为:

bash 复制代码
/usr/lib64/libnsl.so.1

那么你可以创建一个软链接到你的 Conda 环境中:

bash 复制代码
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 目录:

bash 复制代码
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:

bash 复制代码
sudo yum install libnsl

Ubuntu / Debian:

bash 复制代码
sudo apt-get install libnsl1

✅ 方法三:使用 Conda 安装 libnsl

如果你 没有 sudo 权限,可以通过 Conda 安装 libnsl:

bash 复制代码
conda activate r_env

conda install -c conda-forge libnsl

conda list libnsl

这会自动将 libnsl.so.1 安装到你的 Conda 环境中,并由 Conda 管理,无需手动软链接。

🧪 验证是否解决

安装或软链接完成后,在 R 中重新尝试加载:

bash 复制代码
library(rgdal)

如果不再报 libnsl.so.1 错误,说明问题已解决 ✅

方式2:手动安装

bash 复制代码
cd /home/wanzhou/Packages/

🧱 步骤一:激活 Conda 环境

bash 复制代码
source ~/miniconda3/bin/activate r_env

📥 步骤二:下载并编译 PROJ

bash 复制代码
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

参考

相关推荐
叼烟扛炮1 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
福建佰胜张工1 小时前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
wefg11 小时前
【Docker】镜像相关指令
运维·docker·容器
feng_you_ying_li2 小时前
linux之网络层
linux·运维·网络
未来之窗软件服务2 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
卓豪终端管理2 小时前
IT 运维视角下的终端数据安全:能力框架与落地清单
运维
小雉系统2 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
甜到心里的蛋糕2 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
QYR-分析2 小时前
26.2% 高增!场内及园区无人物流车,厂内短驳自动化的 L4 货运载体
运维·自动化
熊猫钓鱼>_>2 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc