手把手教你编译RS GIS开源库(一)编译ECW3.3库

来源:互联网 发布:淘宝支付宝账户 编辑:程序博客网 时间:2024/06/07 23:48

本文为本人原创,请尊重个人劳动成果
未经本人允许,严禁转载!


0 前言

ecw格式是一种基于小波压缩的遥感影像格式,其特点就是压缩率高,不需要建立影像金字塔也能快速读取。ECW最先是由ER mapper研发出来的,后来这个公司被ERDAS所在的Intograpg收购了,最关键的就是,收购之前是开放源代码的,而收购后就不开放源码了,并且只支持windows系统下面的读取ECW文件。现在官方最新的只读版本是4.4。而libecwj2-3.3是既可以读也可以创建的版本(免费license只能创建小于500M的影像),但至少能够创建影像了。

网上只有VS2008或者以前版本的编译介绍,下面就开始介绍该库在Windows VS2010的32位、64位下和Ubuntu(以及类Ubuntu的Linux系统)下的编译方式,以及编译过程中出现的一些常见问题的解决方法。


libecwj2-3.3库源代码下载,由悠悠思故乡提供:源码下载一源码下载二



1 Windows下VS2010编译


1) Win32编译

先找到 $INSTALL/Source/C/NCSEcw/NCSEcw/目录,该目录下有三个文件NCSEcw.dsp、NCSEcw.sln和NCSEcw8.sln ,分别对应VC6、VS2003和VS2008的解决方案,如果用VS2010或以上版本编译的话,得先进行项目转化。(我是用VS2010编译的)
打开解决方案文件后,先设置为Release输出,然后生成解决方案。果然不出所料,VS2010就是跟VS2003不兼容,出现了下面的5个错误:




后三个错误只有在VS2010或者更高版本才会出现,只需如下替换(整个解决方案内替换)操作即可:



替换完后重新编译,就搞定了,前两个错误也就一并解决了!现在,dll、lib文件都在libecwj2-3.3文件夹下面的bin和lib目录下了。

2) x64编译

在VS里面,如下图所示,把配置管理器中的Win32换成x64。


重新编译,却发现了新的错误:

LINK : fatal error LNK1181: 无法打开输入文件“NCSUtil.lib”



这是因为,64位生成的lib与dll会在bin和lib目录下面的Win64子目录里面,而解决方案里面各个项目中的附加库目录中仍然跟32位的一样。理论上有两种修改方法:

1)将所有目录的输出文件“中都去掉Win64。但这会覆盖32位的编译成果;
2)在所有附加库目录中,都加上Win64,也就是将“..\..\..\lib”改成“..\..\..\lib\Win64”.

我选择按照第二种方法修改。修改完后重新编译,会出现很多类似于“fatal error C1083: 无法打开包括文件:“NCSUtil.h”“的错误。只要遵循以下原则修改就行:





1)找不到头文件的,就在每个项目的”属性→配置属性→VC++目录→包含目录“中加上”libecwj2-3.3\Source\include“的绝对路径;
2)找不到对应lib的,就在项目中的”属性→配置属性→链接器→常规→附加库目录“中,加上(或改为)”..\..\..\lib\Win64“;
3)出现类似”fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突“错误的,需要将该项目中的”属性→配置属性→库管理器→常规→目标计算机“或者”属性→配置属性→链接器→高级→目标计算机“改为”MachineX64 (/MACHINE:X64)“。

依照上述三条准则,应该可以正常编译。现在,dll、lib文件都在libecwj2-3.3文件夹下面的bin\Win64和lib\Win64目录下了。


2 Ubuntu下编译

在ubuntu系统下编译此库,需要搭建编译平台(例如gcc等),不了解的可以自行谷歌。

在Ubuntu下面编译libecwj2-3.3库非常简单,只需一下几个命令


cgz@cgz-Lenovo-IdeaPad-Y470:~/下载/libecwj2-3.3$  sudo bash configurecgz@cgz-Lenovo-IdeaPad-Y470:~/下载/libecwj2-3.3$  sudo makecgz@cgz-Lenovo-IdeaPad-Y470:~/下载/libecwj2-3.3$  sudo make installcgz@cgz-Lenovo-IdeaPad-Y470:~/下载/libecwj2-3.3$  sudo make clean


如果出现找不到“libecwj2-3.3/Source/C/NCSEcw/NCSJP2/NCSJPCT1Coder.cpp”文件的问题,那么需要到该文件夹下面,将“NCSJPCT1CODER.CPP”改为“NCSJPCT1Coder.cpp”。(不知道为神马会有这种大小写错误……)

另外,系统需要用有libecwj2-3.3文件夹的读写权限,不然,在configure过程中,会出现“C编译器未找到”之类的错误。

3 总结

因为libecwj2-3.3库是上了年纪的库了,所以现在编译起来比较费劲(但为了可以创建压缩ecw影像文件,这应该是值得的),编译好后,可以参考目录下的sdk.pdf直接使用该库,也可以将其作为gdal库的扩展。本文还介绍了64位下编译该库的方法,希望能满足使用服务器的朋友的需要。



原创粉丝点击