目錄
- 方式1:conda-forge安裝
- 錯誤:缺乏libnsl.so.1
- ? 方法一:查找系統中是否已有此庫
- 替補方案:采用libnsl.so.3鏈接 libnsl.so.1
- ? 方法二:系統中沒有安裝 libnsl.so.1 → 手動安裝
- ? 方法三:使用 Conda 安裝 libnsl
- 方式2:手動安裝
- 🧱 步驟一:激活 Conda 環境
- 📥 步驟二:下載并編譯 PROJ
- 參考
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/libln -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_envconda install -c conda-forge libnslconda 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