Ubuntu18.04下R语言安装SF包出现double free or corruption错误求助
解决Ubuntu 18.04上R的sf/rgdal包安装时PROJ的double free崩溃问题
这问题我之前帮朋友排查过,本质是系统PROJ库的版本冲突或残留依赖导致的C++层面内存错误,编译和运行时链接的PROJ版本不一致,或者旧版PROJ的内存管理bug都可能触发这个崩溃。下面是一步步的实操解决方案:
1. 彻底清理残留的相关依赖与R包
先把R里所有地理空间相关包完全卸载,避免残留配置干扰:
remove.packages(c("sf", "rgdal", "rgeos", "proj4"))
接着清理系统层面的PROJ、GDAL相关库,包括已安装包和残留文件:
sudo apt-get purge libproj-dev libproj15 gdal-bin libgdal-dev libgeos-dev sudo apt-get autoremove sudo apt-get clean
还要检查有没有手动编译安装的PROJ版本(比如之前自己编译放在/usr/local下的),如果有就手动删除:
sudo rm -rf /usr/local/lib/libproj* sudo rm -rf /usr/local/include/proj* sudo ldconfig
2. 更新R到较新版本(关键步骤)
Ubuntu 18.04默认的R版本(3.4.x)太老,和新版sf/rgdal的兼容性极差,先把R更到4.x系列:
# 添加R官方源的GPG密钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 # 加入R 4.x的官方源 sudo add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/' # 更新并安装R sudo apt-get update sudo apt-get install r-base r-base-dev
3. 重新安装系统级的PROJ/GDAL依赖
用更新后的源安装完整的地理空间依赖,确保版本匹配:
sudo apt-get install libproj-dev libproj15 gdal-bin libgdal-dev libgeos-dev
4. 强制R使用系统指定的PROJ库安装sf
打开R,设置环境变量强制链接系统的PROJ库,避免编译时自动找错版本:
# 指定PROJ配置文件路径和库路径 Sys.setenv(PROJ_LIB = "/usr/share/proj") Sys.setenv(LD_LIBRARY_PATH = "/usr/lib/x86_64-linux-gnu/") # 从源码安装sf,明确指定PROJ的头文件和库路径 install.packages("sf", type = "source", configure.args = "--with-proj-include=/usr/include --with-proj-lib=/usr/lib/x86_64-linux-gnu")
5. 如果还是失败,尝试用PPA获取更新的依赖包
Ubuntu 18.04官方源的PROJ版本(5.2.0)可能存在bug,可以添加CRAN专属PPA获取更新的库:
sudo add-apt-repository ppa:cran2deb4ubuntu sudo apt-get update sudo apt-get install libproj-dev libgdal-dev
之后重复步骤4重新安装sf即可。
错误原因解析
double free or corruption 是典型的内存管理错误,常见触发场景:
- 系统中同时存在多个PROJ版本(比如手动编译的新版和系统默认旧版),R编译时链接了一个版本,运行时加载了另一个,导致内存释放逻辑冲突;
- 旧版本PROJ存在已知内存bug,Ubuntu 18.04官方源的PROJ版本较老,这类bug在后续版本已修复;
- R版本过旧,与新版sf/rgdal的C++依赖不兼容。
内容的提问来源于stack exchange,提问作者Derek Corcoran
相关产品推荐
相关产品推荐

