MSVC和MinGW 编译 gdal 并在Qt使用

文章目录

  • **重点在最后,请先看最后**
  • VS 编译
  • MinGW编译
  • 总结

重点在最后,请先看最后

VS 编译

需要使用Microsoft Visual C++ Build
Tools,没有的话提供2015版本,默认安装就可以
主要参考这个
gdal选择2.2.3版本

不同于参考文章 直接在开始菜单打开VS2015 86||64 Native Tools Command Prompt即可,不需要执行
vcvars32.bat 正确修改gdal目录nmake.opt中这两项内容
MSVC和MinGW 编译 gdal 并在Qt使用_第1张图片
最后依次在窗口执行

nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

Qt配置参考
添加完成后在 .pro 文件可能需要删除下面结尾的d**(我并不清楚如何,请谨慎)**,原因是在添加库的时候选择了为debug版本添加“d”作为后缀,编译会报错。需要正确选择静态和动态库。
删除d
MSVC和MinGW 编译 gdal 并在Qt使用_第2张图片

MinGW编译

之上全都是使用VS编译,但是我QT使用的是MinGW32编译,似乎因为这歌原因造成,部分函数调用不了,需要自己选用对应的工具编译。
过程主要参考这个
同样是使用2.2.3版本
本想直接利用Qt的MinGW编译,安装msys后未成功(这里应该是我的失误 `_` ),于是老老实实从新安装,下载过程参考这个中提到安装过程,但我不需要添加环境变量就可以运行。
可以先用gcc -v看一下版本
我把下好的MInGW64和Msys提供一一下:Msys+MinGW64

编译过程中会出错:
首先,先参考这篇文章,其中提到的问题我没遇到,
我遇到:if(nRet != NO_ERROR) NO_ERROR
未定义错误,我在gdal-2.2.3\gcore\gdalclientserver.cpp
还有gdal-2.2.3\apps\gdalserver.c下找到错误代码行,强行将NO_ERROR 修改为0。
修改
这个应该是每个版本的问题吧。
编译过程好久。

编译完成后按照添加库添加到Qt项目中,调用GDALAllRegister()或其他代码;
但是 我编译过程全部通过,但是运行debug版本时,直接程序退出,在尝试

  1. 添加环境变量
  2. 复制gdal/BIn目录文件至debug目录
  3. 添加gdal文件夹至Qt项目
  4. 修改 Qt环境配置
  5. 等等

各种之后均无法成功运行,程序直接崩溃,并不知道为什么,
就是这种错误

总结

  1. Qt 用mingw就用mingw编译gdal,Qt用Msvc就用Msvc编译gdal,不然似乎会出现函数调用失败,编译不过。
  2. 使用Msys和MInGW64的过程和使用MinGW32差不多,注意添加环境变量
  3. 不要把Qt项目kit与自己电脑的32和64相混淆,使用32还是64位编译gdal,需要看自身电脑位数!!!!上面崩溃的原因大概率是连接dll(或exe?)失败,而64位机子打开64位dll(或exe?)(这是多么浅显的道理。。。)
  4. 在正确的编译结果,和正确地引入(引入就是需要注意上面提到的)之后,编译无错,运行失败,这是因为运行exe时访问不到库中的exe和dll,解决办法就是上面提到的第二个解决办法(只需要复制dll文件,对应文件夹),第一个方法不行。
    MSVC和MinGW 编译 gdal 并在Qt使用_第3张图片
  5. 哎,是我的锅

你可能感兴趣的:(MSVC和MinGW 编译 gdal 并在Qt使用)