Ubuntu 下编译安装 GDAL C++库的完整指南
1. GDAL库简介与准备工作
GDAL(Geospatial Data Abstraction Library)是处理地理空间数据的瑞士军刀,它能读写超过200种栅格和矢量数据格式。我第一次接触GDAL是在处理卫星遥感图像项目时,当时就被它强大的格式兼容性震惊了。这个诞生于1998年的开源库,如今已成为GIS开发者的标配工具。
在Ubuntu上安装GDAL C++库有两种主流方式:apt直接安装和源码编译安装。前者简单快捷但版本可能滞后,后者虽然复杂却能获得最新功能。我强烈推荐源码编译方式,因为:
- 可以自定义编译选项,开启特定格式支持
- 能获得性能优化(如SSE指令集加速)
- 便于调试时查看源码
- 版本选择更灵活
在开始前,请确保你的Ubuntu系统满足以下条件:
- Ubuntu 18.04或更高版本(我实测16.04会有兼容性问题)
- 至少4GB空闲磁盘空间(编译过程会产生大量中间文件)
- 稳定的网络连接(需要下载大量依赖)
提示:建议在虚拟机或容器中操作,避免污染主系统环境。我曾在实体机上搞砸过依赖关系,重装系统花了整整半天。
2. 依赖环境搭建
2.1 基础工具链安装
首先更新软件源并安装编译工具:
sudo apt update sudo apt upgrade -y sudo apt install build-essential cmake git -y接下来安装GDAL的核心依赖:
sudo apt install libsqlite3-dev libtiff-dev libcurl4-openssl-dev \ libpng-dev libjpeg-dev libgeos-dev libproj-dev -y这里有个坑我踩过多次:Ubuntu仓库的PROJ版本可能不够新。GDAL 3.0+需要PROJ 6+支持,如果遇到版本冲突,建议先卸载系统自带的PROJ:
sudo apt remove libproj-dev proj-data2.2 PROJ源码安装
到PROJ官网下载最新稳定版(当前推荐9.2.0):
wget https://download.osgeo.org/proj/proj-9.2.0.tar.gz tar xvf proj-9.2.0.tar.gz cd proj-9.2.0编译安装时建议开启数据库支持:
./configure --prefix=/usr/local --enable-lto make -j$(nproc) sudo make install验证安装:
projinfo --version # 应该输出类似 9.2.0 的版本号3. GDAL源码编译
3.1 获取源码
从GDAL官网下载最新稳定版源码:
wget https://github.com/OSGeo/gdal/releases/download/v3.6.3/gdal-3.6.3.tar.gz tar xvf gdal-3.6.3.tar.gz cd gdal-3.6.33.2 配置编译选项
我的推荐配置(兼顾功能与性能):
./configure --prefix=/usr/local \ --with-proj=/usr/local \ --with-geos \ --with-sqlite3 \ --with-curl \ --with-png \ --with-jpeg \ --with-libtiff如果想支持更多格式,可以添加:
--with-hdf5 \ --with-netcdf \ --with-openjpeg注意:如果configure报错缺少某个库,先用apt安装对应的-dev包,例如报错"libjpeg not found"就安装libjpeg-dev。
3.3 编译与安装
启用多线程编译(节省时间):
make -j$(nproc) sudo make install最后更新动态链接库缓存:
sudo ldconfig4. 验证与问题排查
4.1 基础验证
检查安装版本:
gdalinfo --version # 应该输出 GDAL 3.6.3...测试读取TIFF文件:
gdalinfo /usr/share/gdal/autotest/gdrivers/data/byte.tif4.2 常见错误解决
问题1:libgdal.so找不到
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH问题2:PROJ符号未找到检查PROJ安装路径是否正确,重新配置GDAL时指定--with-proj=/usr/local
问题3:TIFF相关错误
sudo apt install libtiff-dev make clean && make4.3 C++项目集成
创建测试程序test_gdal.cpp:
#include <gdal.h> #include <gdal_priv.h> #include <iostream> int main() { GDALAllRegister(); GDALDataset* ds = (GDALDataset*)GDALOpen("test.tif", GA_ReadOnly); if(!ds) { std::cerr << "Open failed: " << CPLGetLastErrorMsg(); return 1; } std::cout << "Width: " << ds->GetRasterXSize() << "\n"; GDALClose(ds); return 0; }编译命令:
g++ test_gdal.cpp -lgdal -o test_gdal5. 进阶配置
5.1 环境变量永久设置
编辑~/.bashrc:
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc source ~/.bashrc5.2 卸载方法
如果需要卸载:
cd gdal-3.6.3 sudo make uninstall5.3 多版本共存
通过修改--prefix参数安装到不同目录,例如:
./configure --prefix=/opt/gdal/3.6.3使用时指定路径:
export PATH=/opt/gdal/3.6.3/bin:$PATH