手把手教你编译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“的绝对路径;依照上述三条准则,应该可以正常编译。现在,dll、lib文件都在libecwj2-3.3文件夹下面的bin\Win64和lib\Win64目录下了。
2)找不到对应lib的,就在项目中的”属性→配置属性→链接器→常规→附加库目录“中,加上(或改为)”..\..\..\lib\Win64“;
3)出现类似”fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突“错误的,需要将该项目中的”属性→配置属性→库管理器→常规→目标计算机“或者”属性→配置属性→链接器→高级→目标计算机“改为”MachineX64 (/MACHINE:X64)“。
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位下编译该库的方法,希望能满足使用服务器的朋友的需要。
- 手把手教你编译RS GIS开源库(一)编译ECW3.3库
- 手把手教你编译安装MPlayer
- 手把手教你编译MOSES机器翻译系统
- 手把手教你如何编写、编译汇编程序
- kindle教你手把手跑通ios-tensorflow版SSD模型(一)—— 编译ios-tensorflow
- 手把手教你交叉编译tslib1.4(目标平台S3C2410)
- 手把手教你在Windows下使用MinGW编译libav
- 手把手教你在Windows下使用MinGW编译libav
- 手把手教你在Windows下使用MinGW编译libav
- 手把手教你:用VS2012编译boost1.53
- 手把手教你:Boost编译使用报错的解决方法
- 手把手教你用NDK9编译ffmpeg2.4.2
- 手把手教你搭建powerpc(P2020)的ltib编译环境
- Centos7 手把手教你 编译安装LNMP环境
- 手把手教你:解决boost库编译使用后thread类使用报错的方法
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
- 手把手教你交叉编译QT/E(目标平台S3C2410)
- 手把手教你安装交叉编译工具链(宿主机系统为ubuntu10.04)
- 第4章 WCDMA
- 2013年4月30日 21:27:48
- 阶段性总结
- 【网络流第四弹】最大点权独立集 ——HDU 1565 方格取数(1)
- 网众linux里启用SSH的方法
- 手把手教你编译RS GIS开源库(一)编译ECW3.3库
- understanding for makefile
- python operator.itemgetter
- SAP HANA并行编程
- python内置函数sorted排序用法
- 最简单的创建多级目录文件夹
- 前途一片光明的移动开发
- extern "C"的用法
- 标题栏时间更新