您的位置:首页 > 编程语言 > Qt开发

基于Qt5的QGIS编译

2016-07-02 23:50 218 查看
QGIS2.14 + Qt5.5.1编译
 
断断续续,感觉编译QGIS编译了好久,终于编译了一个好的。

Qgis是基于开源的库的Qt开发的一套优秀的开源桌面地理信息系统,其许多插件是基于pathon开发的,支持Windows\Linux\MacOS等操作系统,可以访问MySQL/PostGRE等数据库的空间数据,可以连接到OpenstreetMap拉取数据做本地分析和制图。

目前最新版的QGIS是2.14.3版本的,还有2.8.9版本是它的长期维护的稳定版,后者是基于Qt4.8和python2.7的,可以保证环境的稳定,但确实版本有点旧。Qt版本已经升级到了5.6版本的,python也已经到了3.6版本了。要使用Qgis进行二次开发或者学习,就必须自己进行源代码的编译,因为发布的安装版是release的,不能进行代码跟踪。

网上也有一些教程讲QGIS的编译的,有李明录大神编译的1.8版本的,他是用qt4编译的,按他的步骤来配置应该可以编译成功,

博客:http://blog.csdn.net/liminlu0314/article/details/17400075

还有一个QGIS二次开发群主 RunAway写的一篇,他是基于 Qt4和QGIS2.8版本的,他的博客上有许多相关的教程,初学者可以看下。

博客:http://blog.csdn.net/deirjie

从qgis2.10开始已支持Qt5了,但官方并不推荐使用Qt5进行代码的编译,因为可能会遇到许多的坑。直到现在qgis2.14.3, 官方也还是不建议使用Qt5编译。网上好多的教程所使用的三方库都是使用Osgeo4W进行下载的,这些库好多还都是基于Qt4版本编译的。我在编译过程中遇到过下面这些问题:

下载的三方库多, Camke 导出VS的工程 配置选项复杂,好不容易生成 vs的解决方案,到后面,你会发现,这只是很简单的一步,但没有东西参考下,对新手还是很费时的。

打开vs开始编译,过程中遇到的错,编译不过,在之前编译2.10版本的时候,那个版本刚支持Qt5版本,源码中有好几处还需要修改,多谷歌下,其实这些问题前面的大神已经找到解决方案了。

好不容易编译完成后,能不能运行,或有没有问题还是另一回事了。^_^

从去年编译完qgis2.10后有内存泄漏,跟过代码,也没找到是什么原因,最近看qgis2.10和2.14的源码变化还是比较大的,所以对2.14版本进行了编译,编译的也没有内存泄漏的问题了。在此,把我编译过程中遇到的问题做下记录,方便以后查看,写的不是很好,希望为曾和我一样的初学者提供点帮助。

1 、准备工作:

最新版的qgis2.14从其官网下载 地址:http://qgis.org/downloads/



下载然后解压到自己的目录下就可以了,编译过程中要使用到的工具型文件如下:后面会统一附上下载地址:

工具

版本号

Cmake

3.5.2_x86

Qt

5.5.1 msvc2010

Vs

2010旗舰版

flex

2.5.6

bison

3.0

python

Python3.3.4

 

 

依赖三方库的版本信息:

库名称

版本号

源码地址

Gdal

2.1.0

http://trac.osgeo.org/gdal/wiki/BuildHints

Geos

3.5.0

http://svn.osgeo.org/geos/trunk

Proj4

4.9.2

https://github.com/OSGeo/proj.4

Sqlite3

3.7.17

https://www.sqlite.org/

Spatiallite

4.3

http://www.gaia-gis.it/gaia-sins/

spatialliteindex

1.8.5

https://github.com/libspatialindex/libspatialindex.git

expat

2.1.0

https://sourceforge.net/projects/expat/?source=typ_redirec

qca

2.1.0

clone 地址

git://anongit.kde.org/qca.git

push 地址

git@git.kde.org:qca.git

qwt

6.1.3

http://qwt.sourceforge.net/

Qwtpolar

1.2.0

https://sourceforge.net/projects/qwtpolar/

Qscintilla

Gpl2.9.2

https://www.riverbankcomputing.com/software/qscintilla/download

编译qca,从svn拉取最新的源码,直接从camke导出工程 vs编译即可,注意cmake的版本我选择的3.4,之前用3.0.2导出的时候总是报错,不能成功,后来换了Cmake版本好了。

Qwt,qwtpolar,qwtpolar都是用Qt的.pro工程文件组织的,可以直接使用Creater编译或者 直接在小黑窗 下 qmake 即可。

至于gdal的编译,这个库很厉害的样子,编译的时候可以配置好多的插件,只需要在他的 nmake.opt 文件中进行配置的修改,具体的编辑可以参考李明录大神的博客,他写了好多关于gdal的文章,有兴趣的可以了解下。他默认的编译只需要配置三个选项,用文本编辑器打开nmake.opt文件,修改如下类容:



然后依次打开vs2010的命令提示符,执行如下命令

Nmake /f makefile.vc

Nmake /f makefile.vcinstall

Nmake /f makefile.vcdevinstall

该过程大概耗时10分钟左右吧,这样编译的是Release版本的动态库,如果要编译Debug’类型的东台库,要使用如下的命令:

Nmake /f makefile.vcDEBUG=1

Nmake /f makefile.vcDEBUG=1 install

Nmake /f makefile.vcDEBUG=1 devinstall

如果在编译过程中你好还配置了其他的依赖库文件的话,最好也区分下Debug和Release的,否则可能有莫名其妙的错误的。

其他库的编译也基本就是nmake 然后 install就可以完成的,至于要实现其他功能编译,最好的就是读它源码的帮助文档了。

2 、Cmake 导出vs 工程文件:

2.1  环境变量配置 :

Cmake、Flex、Bison和Qt
这些路径中最好不要含有空格,中文等非法字符。下载后解压QGIS2.14的压缩包,然后在同级目录新建一个Build目录,用于保存CMake生成的工程文件和编译后的可执行文件。如下图所示。



 接下来打开CMake的GUI程序来配置QGIS的工程文件。



然后点击configure。根据出现的红色的错误警告把需要的配置项依次配置进去,基本就OK了。

配置完成之后如果如果有这样的提示:SETUPAPI_LIBRARY
字样,进行如下操作,点击 Add Entry按钮添加一个配置项如下:



最后我所有配置完成之后如下图所示:







配置完成之后,应该就可以生成vs的解决方案了,在generate生成的时候,会有一些红色的警告,这个不用管,完成后打开
bulid文件夹如下所示:



2.2  编译过程问题

打开vs工程文件编译即可,最好先编译qgs_core,因为后面的都要依赖这个,这个成功了,其他的也应该没什么问题,所有项目编译完成后,会提示有3个工程失败,后来我看了下,是哪几个启动的exe,qgsbroeser,qgs,qgs_help,报错误如下所示:



出这个错误可能有以下几个原因:
一、新建项目是控制台应用程序而程序通过的是WinMian(及windows入口函数)
因为新建项目的时候选择的是控制台应用程序,控制台应用程序的入口是main。而在.CPP文件中提供的是windows入口函数WinMian。
解决办法:
(1)项目->属性->配置属性->C/C++ ->预处理器 中的【预处理器定义】 删除“_CONSOLE” 添加 “ _WINDOWS”
(2)项目->属性->配置属性->连接器->系统中的【子系统】设置为Windows(/SUBSYSTEM:WINDOWS)
(3)生成->重新生成解决方案
这样在启动qgis时会有一个小黑窗闪,很不爽。
二、这是我自己的解决方法,

解决办法:

在出现问题的解决方案上右键--属性--链接器---输入--附加依赖项:



注意Debug与Release版本的区别。再次执行编译,应该就没什么问题了。

3 验证编译的qgis是否正确:

用查依赖工具depend查qgis的所有依赖项,丢到bin里面,然后在生成的目录下双击qgis启动图标,即可正常运行:



最后附上资源下载链接地址:http://pan.baidu.com/s/1i5Jdc13

提取码:ub6m
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息