非标准位置安装R语言sf包失败:proj_api.h未找到求助
解决sf包安装时找不到proj_api.h的问题
我来帮你梳理几个针对性的解决方向,搞定这个proj_api.h not found的编译错误:
1. 先确认proj_api.h的真实位置
你指定了--with-proj-include=/home/programs/anaconda3/include/,但如果你的Anaconda安装的是PROJ 6.x及以上版本,proj_api.h会被放到include/proj子目录里,而非直接在include根目录下。
先通过命令定位文件的实际路径:
find /home/programs/anaconda3 -name proj_api.h
假设找到的路径是/home/programs/anaconda3/include/proj/proj_api.h,那修改configure.args里的路径参数再尝试安装:
install.packages('sf', type = "source", configure.args='--with-gdal-config=/home/programs/anaconda3/bin/gdal-config --with-geos-config=/home/programs/anaconda3/bin/geos-config --with-proj-include=/home/programs/anaconda3/include/proj/ --with-proj-lib=/home/programs/anaconda3/lib/')
2. 用conda直接安装sf(最省心的方案)
既然你已经在用Anaconda管理依赖,直接通过conda安装R的sf包可以避开手动配置路径的麻烦——conda会自动处理所有依赖的版本匹配和路径配置:
# 先激活你的conda环境(如果有单独的环境) conda activate your_env_name # 从conda-forge通道安装r-sf conda install -c conda-forge r-sf
安装完成后,直接在R里执行library(sf)就能调用包了。
3. 通过环境变量指定依赖路径
在安装sf前,先设置系统环境变量,让编译器自动找到PROJ、GDAL的头文件和库:
# 在终端执行(也可以加到~/.bashrc里永久生效) export CPLUS_INCLUDE_PATH=/home/programs/anaconda3/include:/home/programs/anaconda3/include/proj export LIBRARY_PATH=/home/programs/anaconda3/lib export LD_LIBRARY_PATH=/home/programs/anaconda3/lib
然后启动R,直接执行简化的安装命令:
install.packages('sf', type = "source")
4. 检查PROJ与GDAL的版本兼容性
你的GDAL版本是2.4.1,它对PROJ的兼容版本通常是4.x或5.x。如果Anaconda里的PROJ是6.x及以上,可能会和旧版本的GDAL、sf存在接口不兼容的问题。先检查PROJ版本:
/home/programs/anaconda3/bin/proj --version
如果是6+版本,可以尝试安装适配PROJ 6的sf版本(比如sf 0.9.0及以上),或者降级PROJ到5.x版本后再安装sf。
内容的提问来源于stack exchange,提问作者Sezen




