ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gdal244_mingw64.rar 使用指南:MinGW 环境下 GDAL 配置与 Qt 集成

gdal244_mingw64.rar 使用指南:MinGW 环境下 GDAL 配置与 Qt 集成 简介gdal244_mingw64.rar 是一份面向 Qt5 的 GDAL 2.4.4 MinGW64 预编译资源包适合在 Windows 64 位环境中进行地理信息系统或遥感应用开发的中高级工程师。它解决了 Qt 工程里集成 GDAL 时常见的编译与配置问题开发者无需从源码构建即可直接调用库提供的栅格/矢量读写、投影转换等接口。压缩包共 188 个文件内含 65 个头文件、24 个 exe 命令行工具、35 个 gfs 文件、24 个 csv 坐标参数文件以及 xml、wkt、json、dgn、dxf、dll 等辅助文件整体约 90.14MB。其中头文件用于编写代码exe 工具可完成数据格式转换csv/wkt/xml 等为地理坐标与元数据描述文件覆盖开发、调试与数据处理全流程。目前已有 291 人学习下载。解压后可直接在 Qt 工程中链接 libgdal.a、libgdal.dll.a 并包含头文件还能使用附带命令行工具这一套件节省了手工编译和配置时间适合快速搭建 GIS 桌面应用开发环境让开发工作更聚焦业务本身。 如果你在Windows上做GIS、遥感或者地图数据处理开发环境又恰好锁定在Qt MinGW-w64这套技术栈上那你大概率在网盘、群文件或者某个技术论坛的共享目录里见过类似“gdal244_mingw64.rar”这种名字的压缩包。它不是一个官方发布的标准安装包而是某个开发者用MinGW-w64工具链把GDAL 2.4.4编译好之后随手打包分享的产物。为什么这种东西会一直流传因为GDAL官方在Windows下默认提供的是MSVC编译的二进制包而MinGW用户直接去链接MSVC编译的库会撞上一长串符号解析、运行库兼容的问题。这篇博文就围绕这个包本身、拿到之后怎么用、怎么接进工程以及一个在MinGW环境下高度相关的Git证书报错一次性讲清楚。1. gdal244_mingw64.rar到底是个什么产物1.1 版本号里的讲究GDAL是地理数据抽象库全称Geospatial Data Abstraction Library做GIS开发的人没有不知道它的。栅格、矢量、坐标转换、影像金字塔、格式转换几乎都离不开它。文件名里的“244”指的是GDAL 2.4.4这是2019年左右的版本放到今天看确实不算新但在很多历史项目里依然稳定运行。对老项目来说升级GDAL意味着可能要同步升PROJ、升级数据库驱动、重新测试几十种数据格式的读写所以不少人宁可继续用2.4.x也不愿意折腾到大版本。1.2 为什么偏偏要MinGW-w64版MinGW-w64是Windows上的GCC工具链很多人用它是因为在Qt Creator里做界面开发时默认的Kit就是MinGW。这时候如果项目底层要用GDAL问题就来了官方Windows包是MSVC编译的MinGW的GCC链接器没法直接吃MSVC的C接口对象文件。C接口勉强能用但GDAL的C API到处都是std::string、std::vector这类东西两边标准库和异常模型往往对不上编译阶段就能冒出一堆undefined reference。1.3 压缩包里通常会有什么从文件名就能猜到大致结构这类打包者一般会按“bin include lib”三个目录整理bin一堆动态库和命令行工具比如libgdal-20.dll、gdalinfo.exe、gdal_translate.exe、ogr2ogr.exe。include开发用的头文件gdal.h、gdal_priv.h、ogr_api.h等。libMinGW链接用的导入库和静态库常见的有libgdal.dll.a、libgdal.a。有些包还会附带gdal-data数据目录或者叫share/gdal里面是pcs.csv、gcs.csv、coordinate_axis.csv这些坐标系统描述文件。这个目录至关重要丢了它很多投影和坐标转换功能会在运行时直接报错。2. 与其自己从源码折腾不如先用现成包2.1 自己编译GDAL for MinGW的完整链路如果临时需要“最新版”或者“带特定插件”的GDAL很多人的第一反应是自己编。思路没错但过程真的不轻松。以GDAL 2.4.4为例官方支持用NMake脚本在MSVC下编也支持Unix configure但对MinGW环境你通常得走gdalmake脚本或者手工调CMake。这还不算完要完整支持jpg、png、tiff、geojson、sqlite这些格式你还得先把libpng、libjpeg、libtiff、GEOS、PROJ、SQLite、curl这些依赖库挨个用MinGW编译一遍。整个流程跑下来顺利的话大半天不顺利的话一星期都耗在依赖匹配上。尤其是PROJ库版本和GDAL版本没有严格绑定关系错一个版本编译出来也能过但运行时坐标系转换结果可能完全是乱的。2.2 官方包的缺口和社区包的解法官方在Windows上的预编译包长期只覆盖MSVC和Python环境。Python还好说很多库可以用pip install gdal2.4.4直接装到Python里但如果你写的是C程序或者Qt界面程序需要的是能被MinGW链接的native库这时候就只剩下两条路要么自己啃源码要么找一个觉得靠谱的社区编译版。gdal244_mingw64.rar这类包就是在这种情况下被传开的。它的价值不在于“版本有多新”而在于省掉了整个依赖编译链让MinGW用户可以快速把GDAL跑起来。2.3 拿到包先别急着用看三样东西下载之后先别急着解压到C盘建议先确认三件事。第一压缩包里的目录结构是不是标准的bin/include/lib第二动态库名字是什么GDAL 2.x时代一般是libgdal-20.dll第三带不带gdal-data目录。这三样直接决定你后续配置环境变量的工作量。如果包里缺了gdal-data我建议直接放弃这个包因为你后面得花更多时间去找对应版本的坐标数据文件反而更麻烦。3. 拿到压缩包之后的落地配置3.1 解压位置的讲究解压路径不要带空格不要带中文这是Windows下C项目的基本修养。我一般习惯放到D:\dev\gdal244_mingw64这种纯英文路径下。有人喜欢直接解压到C:\Program Files里结果CMake的find_package因为路径里带空格各种抽风最后绕了一圈才发现是路径问题。3.2 环境变量和动态库搜索路径解压之后要做三件环境配置把bin目录加进PATH。这一步是为了让gdalinfo.exe、gdal_translate.exe能被直接调用。设置GDAL_DATA指向包内的gdal-data目录。比如D:\dev\gdal244_mingw64\bin\gdal-data。如果运行命令时出现找不到PROJ相关文件的提示再补一个PROJ_LIB指向包内对应的proj.db或者proj目录。设置方式就是Windows的“系统属性 → 环境变量”或者命令行临时设置set PATHD:\dev\gdal244_mingw64\bin;%PATH% set GDAL_DATAD:\dev\gdal244_mingw64\bin\gdal-data注意这只是临时设置每次开新终端都要重新执行。想永久生效就老老实实用setx但setx会覆盖原变量操作前记得先导出当前值。3.3 用gdalinfo验证环境配置完别急着写代码先运行一个最基础的命令验证环境是否正常gdalinfo --version如果输出类似GDAL 2.4.4, released 2019/xx/xx说明基本环境通了。再试一个真实文件gdalinfo D:\data\your_file.tif能正常打印影像信息说明动态库和数据目录都没问题。如果提示error while loading shared libraries: libgdal-20.dll多半是PATH没生效或者DLL被报毒杀掉了。这种情况在MinGW包里真的不算少见因为MinGW编译器生成的DLL和某些杀软的特征库偶有冲突下载时记得核对一下文件来源。4. 在C/Qt工程里把库正确链接起来4.1 头文件和导入库的对应关系MinGW的GDAL包头文件和导入库的匹配关系必须搞清楚。头文件是编译期需要的东西导入库是链接期需要的东西。GDAL 2.4的MinGW导入库通常叫libgdal.dll.a或libgdal.a链接时写成-lgdal。如果你发现包里的导入库叫gdal_i.lib那多半是MSVC版MinGW链接器大概率不认别硬用。4.2 CMake和qmake的接入写法如果项目是Qt的qmake工程最直接的方式是在.pro文件里加INCLUDEPATH D:/dev/gdal244_mingw64/include LIBS -LD:/dev/gdal244_mingw64/lib -lgdal如果是CMake工程很多打包者并不提供GDALConfig.cmake直接用find_package(GDAL)可能什么也找不到。这时候我建议别硬折腾手动指定路径就行set(GDAL_INCLUDE_DIR D:/dev/gdal244_mingw64/include) set(GDAL_LIBRARY D:/dev/gdal244_mingw64/lib/libgdal.dll.a) include_directories(${GDAL_INCLUDE_DIR}) target_link_libraries(your_app ${GDAL_LIBRARY})如果你用的是CMake 3.13以上的版本link_directories的用法有变化建议尽量用target_link_libraries直接给绝对路径省得被路径查找规则坑。4.3 最容易翻车的运行时DLL加载问题链接通过只是第一步运行时才是翻车重灾区。最常见的问题是程序编译成功但双击运行直接报“找不到libgdal-20.dll”。原因很简单exe在运行时不会去PATH里挨个找DLL它默认只搜当前目录、系统目录和已经在内存里加载的DLL。解决方案有两个把libgdal-20.dll复制到exe同目录下。在代码启动时用QCoreApplication::addLibraryPath或Windows的SetDllDirectory手动指定bin目录。我个人的习惯是开发调试阶段用方案一发布阶段也复制到exe旁边省得用户机器上还要配环境变量。5. 绕不开的并发症Git报ca-bundle.crt证书错误5.1 这个报错从哪来GDAL环境配好之后很多人会顺手用Git拉取代码库结果在MinGW环境下看到一个很诡异的报错error setting certificate file: d:/git/mingw64/etc/ssl/certs/ca-bundle.crt这行的关键是d:/git/mingw64/etc/ssl/certs/ca-bundle.crt这个路径。Git for Windows在安装时默认会把http.sslCAInfo指到自己的证书文件上。如果你的Git是绿色版、便携版或者之前从别的机器拷贝过来的那这个路径很可能是原来机器上的老路径迁移之后文件根本不存在。5.2 一条完整排查链路我当时碰到的场景是克隆一个内网Git服务仓库时一执行git clone就直接抛这个错误。第一个反应是“证书文件损坏”或者“公司网络劫持”其实都没到那一步。建议按以下顺序排查git config --global --list --show-origin | grep ssl git config --system --list --show-origin | grep ssl先确认内部里http.sslCAInfo到底被谁设置了。如果看到指向d:/git/mingw64/etc/ssl/certs/ca-bundle.crt下一步就检查这个文件是否存在ls -l d:/git/mingw64/etc/ssl/certs/ca-bundle.crt如果系统提示找不到这个文件问题就定位了Git配置里的证书路径是无效的。5.3 两种修复方案与避坑建议修复方式有两种任选其一。第一种重新指定有效的证书路径。找到Git安装目录下实际存在的ca-bundle.crt比如git config --global http.sslCAInfo D:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt第二种直接用Windows系统证书库git config --global http.sslBackend schannel我个人推荐第二种因为Git for Windows自带OpenSSL后端时需要依赖ca-bundle.crt文件而schannel后端直接调用Windows系统证书库只要系统本身能正常访问httpsGit就能正常走。换机器之后也不用再担心路径失效的问题。提示网上很多资料会直接让你执行git config --global http.sslVerify false来解决. 这个办法能立刻绕过验证但也等于把所有https仓库的证书校验都关了。只建议在临时测试、且明确知道目标仓库可信的情况下使用不要长期作为默认配置。这个坑看着和GDAL无关但只要你在Windows上用MinGW环境做事迟早会碰到。Git装好了、gdal也用起来了突然克隆失败一次知道排查方向能省很多时间。6. 一点选型建议与安全提醒从实用角度看如果你的项目还在用Qt 5.15或更早的LTS版本开发环境是Qt Creator MinGW那gdal244_mingw64.rar这类包依然有它的价值省时间、能跑、有社区背书。但长期做GIS开发的话我建议不要只依赖别人的压缩包找机会搭一条自己的编译流水线把GDAL的版本、依赖库和编译参数固定下来每次都能复现出完全一致的环境这才是最稳的。安全方面也要提醒一句从网盘、群文件拿到的rar解压前一定要用杀软扫一遍解压后看看有没有多余的可执行文件或明显异常的脚本。条件允许的话向发布者要一下MD5或SHA256校验值放到本地比对通过再用。以前有人把GDAL的rar重新打包混入后门专门坑GIS开发者的机器这种事不是没发生过。最后分享一个实际经验如果你哪天真的把gdal244_mingw64.rar这个包用顺了记得把原始压缩包和校验值一起留好。这种个人发布的编译包没有固定下载源作者过几个月删档了你再想找同一个版本可能要翻遍整个网络都找不到。手里留一份比什么都靠谱。本文还有配套的精品资源点击获取
返回列表