You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

非标准位置安装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

火山引擎 最新活动