该文是在我另一篇博客“gdal、geos的 windows编译 openCL加速”基础上进行进一步扩展的,那篇博客记录的是gdal2.2.0的整个编译过程,由于那篇博客的文末记录了一个gdal2.2.0测试OpenCL加速纠正的已知内存泄漏Bug,所以该博客直接使用gdal-2.4.4的基础上进行编译。
根据李民录大哥的GDAL指南提示如下
仔细研究了三种方法,ECW库、Kakadu、OpenJPEG
Kakadu库win10编译有异常,而且其源码比较难找,所以没有测试。参考:kakadu——JPEG2000图像压缩软件的安装和使用
现在测试一下正常编译的gdal(按照另一篇博客方法进行编译,没有ECW库)是否支持*.jp2影像格式,在gdal的bin目录下找到gdalinfo.exe,然后使用下面命令参数进行测试
D:\VariousLib\GDAL\Src\GDAL244Build\bin\gdalinfo.exe -checksum -nomd -norat C:\temp\ShuiFa\datas\GF-6_MS_MYC_202210190316_202210190323_sci_13.jp2
测试结果:
提示错误,gdal不支持的影像格式
好了,现在下面来解决这个问题。上面说过该博客直接使用gdal-2.4.4的基础上进行编译,所以相应下载资源文件如下
编译需要的文件:
1、gdal-2.4.4源码及geos-3.5.2源码下载
ECW库主要是可以解析JPG2000格式的影像,由于工作需要,我们的程序需要支持*.jp2格式,该格式影像在默认编译gdal的时候是不支持的,需要自己下载ECW库,一起编译即可。
ECW库文件下载:
ECW动态库(编译好的dll,可附加GDAL编译)
如果不想自己动手,要本博客编译出来现成的东西,可以直接下载
GDAL库2.4.4版本(内置其他库包括支持OpenCL纠正+geos352+ECW)
这次我的gdal输出目录设置的是“D:\VariousLib\GDAL\Src\GDAL244Build”文件夹,后期更新汇总的时候需要用到
由于设置ECW库前,需要把源码先编译成动态库,所以直接在网上找到了动态库,然后直接进行GDAL的ECW库编译,ECW编译好的库[下载地址]。(https://download.csdn.net/download/weixin_42727069/86947197)
计划编译64位系统,所以重点关注64位系统的需要文件在不在。
根目录结构如下:
Dll文件夹下64位文件夹
nmake.opt文件在gdal-2.4.4文件夹,打开后查找“ECWDIR”,该字符串大概位置会出现三次,一个是4.1版本的,一个是5.0版本的,一个是3.3版本的,最后选择了5.0版本的代码进行更改。
最后选择了5.0版本的进行更改,知道为啥吗?
在确定用啥代码进行更改的时候我仔细看了一下我下载的库文件(这就是为啥我要把ECW库里面的文件截图展示出来),在lib/x64文件夹下是有NCSEcw.lib文件,正好与5.0版本吻合,所以就选用5.0版本的
取消注释更改的时候注意路径和路径下面对应的文件都要仔细检查一下,否则会出现各种异常
# Uncomment the following and update to enable ECW read support with the 5.0 SDK
ECWDIR = "D:\VariousLib\GDAL\Src\ecw"
ECWFLAGS = -DECWSDK_VERSION=50 \
-I$(ECWDIR)\include \
-I$(ECWDIR)\include/NCSECW/api -I$(ECWDIR)\include/NCSECW/jp2 \
-I$(ECWDIR)\include/NCSECW/ecw
ECWLIB = $(ECWDIR)\lib\x64\NCSEcw.lib
更改后的截图
参考上一篇博客的gdal方法,细节就不记录了。
1、启动VS2015的 x64 本机工具命令,在该命令窗口上进行编译;
2、把目录切换到gdal安装包根目录;
3、按顺序执行下面命令
nmake -f makefile.vc MSVC_VER=1900 WIN64=1;//编译
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install;// 生成bin、data、html文件夹
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall; //devinstall生成lib和include(其实)
一般执行第一条编译语句容易出错,如果没有错误,下面两条代码很快可以执行完。
最后一条语句执行成功后界面如下
再次执行检查命令
D:\VariousLib\GDAL\Src\GDAL244Build\bin\gdalinfo.exe -checksum -nomd -norat C:\temp\ShuiFa\datas\GF-6_MS_MYC_202210190316_202210190323_sci_13.jp2
会提示缺少NCSEcw.dll弹框,这时候只用把ecw文件夹下的dll/x64文件夹下的NCSEcw.dll、NCSEcwd.dll拷贝到gdalinfo.exe同级目录即可,运行结果如下图
现在这个版本的gdal已经支持jp2影像。
1、ecw/dll/x64下面所有*.dll和*.exe复制到“D:\VariousLib\GDAL\Src\GDAL244Build\bin”目录
2、ecw/include下面所有文件复制到“D:\VariousLib\GDAL\Src\GDAL244Build\include”目录
3、ecw/lib/x64下面所有lib复制到“D:\VariousLib\GDAL\Src\GDAL244Build\lib”目录
如果编译了geos则也要把geos相关文件复制汇总,明细:
1、geos-3.5.2\src文件夹下所有的*.dll复制到“D:\VariousLib\GDAL\Src\GDAL244Build\bin”目录
2、geos-3.5.2\include文件夹下所有文件复制到“D:\VariousLib\GDAL\Src\GDAL244Build\include”目录
3、geos-3.5.2\src文件夹下所有的*.lib复制到“D:\VariousLib\GDAL\Src\GDAL244Build\lib”目录
截图如下
bin目录
include目录
lib目录
All done!特此记录!
辉 2022.11.10 初版编辑
Jp2影像,纠正输出1.46G影像,耗时:139秒
Tiff影像,纠正输出1.48G影像,耗时:16秒
内存泄漏严重:
辉 2022.11.11 再版
由于测试使用ECW库编译的GDAL在读取jp2影像速度较慢,而且还存在严重内存泄漏问题,故又尝试使用该库。
参考链接:
OpenJPEG 2.4.0的图示使用
OpenJPEG的详细使用
OpenJPEG各种版本的下载
打开链接,点击下载下面红框安装包。
或者csdn上面下载我编译好现成的库:
编译好的gdal244库(带openjpeg)和单独openjpeg-v2.4.0-windows-x64库
nmake.opt文件在gdal-2.4.4文件夹,打开后查找“OpenJpeg”,找到如下位置。
根据下载的Openjpeg库进行更改include目录绝对路径和lib文件绝对路径,更改后如下
由于明知ECW库不好用,这里就可以把ECW库相关的使用#给注释掉,如果以前编译过ECW库这么做后期编译会报错,最好把源码解压后复制gdal-2.4.4文件夹nmake.opt文件和alg文件夹下的makefile.vc文件,进行替换,从头编译即可
参考上一篇博客的gdal方法,细节就不记录了。
1、启动VS2015的 x64 本机工具命令,在该命令窗口上进行编译;
2、把目录切换到gdal安装包根目录;
3、按顺序执行下面命令
nmake -f makefile.vc MSVC_VER=1900 WIN64=1;//编译
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install;// 生成bin、data、html文件夹
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall; //devinstall生成lib和include(其实)
最后一条语句执行成功的界面如下
使用OpenJPEG来解析Jp2影像,纠正输出1.46G影像,耗时:40秒,通过观察内存占用情况,没有过多的内存泄漏。该库效果比ECW库效率更高
如果以前GDAL有的话只用更新gdal204.dll动态库到源程序目录即可,不必重新编译所有代码。
辉 2022.11.11 再版