作为关于QGis的第一篇博文,我还是先简单介绍下QGis(当然,我默认大家至少应该知道GIS是什么),比较官方的描述我就直接摘取了wiki上的内容:
QGIS(原称Quantum GIS)是一个自由软件的桌面GIS软件。它提供数据的显示、编辑和分析功能。
据说在国外QGIs用得比较广泛,在国内的处境很惨,可以说很多从事地理信息工作的人只知道ArcGis而都不知道这个软件,这主要是与国情有关。
由于QGis是开源软件,所以我的兴趣主要是在开发上面,目前国内这方面的资料非常少,等会我会给大家推荐一个对新手有很大帮助的博客,我也是从那里学习到QGis的入门知识。在文章最后我也会把整个编译过程中对我有所帮助的博文地址放上,给大家做参照。
经过断断续续一周的折腾终于将QGis编译好了,过程很曲折,编译完成后也很有成就感。
其实整个编译过程不是很真复杂,因为有很多工具可以简化我们的操作,但是对于之前没接触过的人来说在编译过程中会遇到很多问题,就算你一步一步照着网上的流程做,总是会在中途遇到别人没遇到的问题,开源软件的编译我之前就只编译过gdal,这次编译QGis真的很不容易,因为编译它会涉及大大小小的开源库几十个...想想就....,所以我写这篇博文也不能说完全照着做就能顺利编译,更多的是想将自己在这个过程中遇到的问题与大家分析,对大家有一点点帮助。
好,正式开始了。
(一)准备工作
先把需要的工具软件准备好,我整理了一下需要单独准备的只有6个:
1、VS2010,这个应该没什么说的;
2、Qt 4.8.6 x86,这个要说下,现在最新版是Qt5.7了,但是官方安装文档中还是不建议使用Qt5,或者说对于这条官方一直未作修改,所以如果不清楚自己该使用Qt4还是Qt5的就用Qt4吧,免得在开发过程中出现一些莫名其妙的问题......
3、qgis-latest-ltr.tar.bz2,qgis的源码,我用的是目前的长期支持版本,就是2.14.4;
4、cmake 3.5.2 x86,我使用的这个版本比其他推荐的要新,反正在用的时候都正常;
5、osgeo4w,这是个好东西,qgis编译过程中需要的开源库都是用这个下载的;
6、win_flex_bison,flex与bison现在都在同一个包里,所以只需要下载一个包就行了。
OK,要单独准备的东西已经好了,可以先不着急安装,我们先把需要的开源库下载起,因为这个比较费时间。
(二)开源库下载
利用osgeo4w安装需要的开源库,选一步一步:
到这里就要开始准备下载了,我也按惯例把库先列一下,不过大家不用对着手动去找,有更好的办法:
- expat
- fcgi
- gdal
- grass
- gsl-devel
- iconv
- pyqt4
- qt4-devel
- qwt5-devel-qt4
- sip
- spatialite
- libspatialindex-devel
- python-qscintilla
我们既然都是编译的新版本,肯定也要用新办法,直接在osgeo4w中搜索qgis,在Libs中选择下图中的两项,前面对应有版本号,Keep是由于我已经安装过了,没安装过是Skip,然后在对应的Bin项选择就行了:
然后点下一步,会看到程序将所有需要依赖的开源库都列出来了(由于我已经安装过了,就没截图了),由于下载速度比较慢,在下载的时候还会出现个别下载失败的,不过不要紧,个别失败的我们后面在配置cmake的时候再来补,在等待的时候我们继续前面还没做完的工作。
(三)软件安装及环境配置
下面的安装程序除了VS外,其他的尽量不要放在有中文与有空格的路径下。
软件安装的过程都差不多,没什么特别的地方就不一一说了,环境配置有2个办法,一是每安装完一个程序就对应将环境配置好,另一种办法就是用批处理文件,在后面会附上。
关于环境配置其实我还有个疑问,我理解的是将所有环节配置好后,在配置CMAKE的时候,文件夹路径基本上就都能对应上了,但是实际操作中还是要自己动手一个个的设置,不知道是不是我还漏了什么环节,但是我还是建议大家将环境变量都设置好。
1、安装VS2010;
2、安装Qt,核实环境变量是否配置好(我忘了安装完后会不会自动添加环境变量),没有的话加个就行了:
3、安装cmake,路径最好不要有空格,我用的这个不用安装,解压就行了;
4、安装win_flex_bison,路径最好不要有空格,装完后应该是这样:
5、将qgis-latest-ltr.tar.bz2解压,并新建一个build文件夹,用来存放编译文件,dev现在请忽略:
6、最后等OSGeo4W都下载完成后,就开始配置环境变量了,自己创建一个*.bat文件,将下面的内容复制进去:
@echo off
set VS10COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib
set OSGEO4W_ROOT=C:\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%; C:\cmake-3.5.2-win32-x86\bin; C:\win_flex_bison
@set GRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.4
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
@cmd
其中第2、3行内容就是你VS2010对应的路径,第5、6也同样对应你电脑上的路径,注意v7.0A这个地方要一致,第8行就是你的OSGeo4W路径,第10行对应你的CMAKE与win_flex_bison的路径,后面3行都大同小异,保存好后就直接运行,如果有提示找不到路径的,就是上面某行没设置好。现在回想起来我设置完在配置时没识别到,可能和系统权限有关,当时虽然没提示错误,但是我也没有核实环境变量 - -!!
(四)导出VS工程
终于把准备工作都做完了,开始进军CMAKE了,我之前编译遇到的问题大部分都在这里,首先运行程序,并设置源路径与编译后路径:
然后点Configure,选择VS2010:
点击Finish后,会弹出一个错误,这个是正常的,我们仔细看下面的信息,注意这个“flex not found”,我们前面已经安装好了,只是没找到而已:
所以我们只要将flex程序对应的路径填进去就好了,我们继续点Configure,出现的情况和刚才一样,会提示没找到bison,填进去:
继续Configure,根据错误提示与标红的地方,我们需要配置GEOS与PROJ的路径,注意GEOS库的路径:
继续Configure,设置GDAL:
继续Configure,这次出来的就比较多了,不过我们对照标红的地方一个一个的配置,顺便说下,在对着下图如果有找不到的,就重新运行OSGeo4W程序,单独搜索出来下载:
继续Configure,有细心的观众发现在下面信息中会发现以下的错误,这些其实不用管,我之前被误导了,以为哪里配置不成功。。。。
接着上面继续,这次有3个表红的项,但是我们看下面的提示“Could not find QCA”,所以只需要配置第一个就行了:
继续Configure,又出现了一些问题,是时候要修改WITH内容了:
向下拉,找到WITH:
继续Configure,离成功还差一步了,这次出现了一个SETUPAPI_LIBRARY错误:
SETUPAPI_LIBRARY错误的解决办法如下,点击Add Entry,然后配置内容:
现在Configure后,就显示成功了,到这配置就完成了,如果大家在配置过程中遇到的问题与我不一致,不要着急,注意下面的错误提示,它提示哪个没找到你就对应去配置,如果出现上面没提到的库,一般与WITH中的配置有关,可以多尝试几次:
在Generate之前,还需要改个东西,涉及到我们最后一步提取开发包的路径,默认路径是在C:\Program Files (x86)中,建议修改到其他路径下,由于我用的Win10,在这个路径下需要权限,我之前提取开发包一直失败就是这个原因:
现在点Generate,我们下一个编译需要的工程文件就全部生成成功了。
所需要的工程文件:
(五)编译工程
在VS中加载qgis2.14.4.sln工程,加载完成后共有192个:
首先将编译模式改为RelWithDebInfo,然后在qgis工程上点右键,设置为启动项:
开始编译,中途正常:
注意:大家在第一次编译的时候可能会报错,如果错误是在编译qgis_core工程的qgsunittypes.cpp出现常量中有换行符与语法错误:
大家定位过去会看到是因为下面下面两个符号(分秒)造成的,目前我自己的解决办法就是在符号两边各加一个空格就能通过编译:
编译完成后在,生成的程序在 build\output\bin\RelWithDebInfo 下,一个基础的qgis程序就编译完成了:
接下来我们重新将ALL_BUILD设置为启动项,将整个工程都编译,编译完后会出现3个错误:
我们现在什么都不动,然后再编译下,因为之前已经编译过,所以会很快,完成后就只剩1个错误,这时候编译就完成了。
我们现在将C:\OSGeo4W\bin目录下所有的dll都拷贝到qgis.exe所在的目录,就可以正常运行了,大家会发现里面图标显示不全,解决办法是将C:\Qt\4.8.6\plugins\imageformats整个文件夹拷到qgis.exe所在的目录就好了。
关于图标问题的详细信息可以参照:http://blog.csdn.net/deirjie/article/details/50446033
(六)提取开发包
整个工程编译完了,对于我们开发使用还有一个步骤,就是提取开发包,将INSTALL设置为启动项,然后编译,就会成功在我们指定的路径下生成文件夹,如果这步失败可能就是我上面提到的路径问题:
整个编译过程已经完成了,最后来看下:
qgis-2.14.4:是我们解压出来的源代码
build:编译的工程文件
dev:提取出来的开发包(上一步提取的,改了下文件夹名字)
编译完成只是迈出了第一步,对我来说只是个开始,后续我也会继续将我自己在qgis上学习的一些心得陆续放上。
最后我附上几个在编译中对我帮助很大的地址,大家在遇到问题时可以多参照(其中第一个链接里还有很多入门教程):
http://blog.csdn.net/deirjie/article/details/48216773
http://blog.csdn.net/liminlu0314/article/details/17400075
http://bbs.qter.org/forum.php?mod=viewthread&tid=3802
http://www.osgeo.cn/post/3805.html
最后我把上面用到的工具,及我最后提取出的开发包共享一个,大家需要的可以下载:
http://pan.baidu.com/s/1nvF8sfZ
来源:oschina
链接:https://my.oschina.net/u/2660258/blog/716689