QGis2.14.4基于Win10+Qt4.8.6+VS2010环境的编译

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-02 00:22:27

作为关于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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!