作者:孙强林
断断续续的,感觉编译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二次开发群主写的一篇,他是基于 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
Geos 3.5.0 http://svn.osgeo.org/geos/trunk
Proj4 4.9.2 https://github.com/OSGeo/proj.4
Sqlite3 3.7.17
Spatiallite 4.3
spatialliteindex 1.8.5 https://github.com/libspatialindex/libspatialindex.git
expat 2.1.0
qca 2.1.0
qwt 6.1.3
Qwtpolar 1.2.0
Qscintilla Gpl2.9.2
编译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.vc install
Nmake /f makefile.vc devinstall
该过程大概耗时10分钟左右吧,这样编译的是Release版本的动态库,如果要编译Debug’类型的东台库,要使用如下的命令:
Nmake /f makefile.vc DEBUG=1
Nmake /f makefile.vc DEBUG=1 install
Nmake /f makefile.vc DEBUG=1 devinstall
如果在编译过程中你好还配置了其他的依赖库文件的话,最好也区分下Debug和Release的,否则可能有莫名其妙的错误的。
其他库的编译也基本就是nmake 然后 install就可以完成的,至于要实现其他功能编译,最好的就是读它源码的帮助文档了。
2. Cmake 导出vs 工程文件:
2.1 环境变量配置 :
Cmake、Flex、Bison和Qt 这些路径中最好不要含有空格,中文等非法字符。下载后解压QGIS2.14的压缩包,然后在同级目录新建一个Build目录,用于保存CMake生成的工程文件和编译后的可执行文件。如下图所示:
然后点击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是否正确: