一、准备工作

1、下载QGIS源码

最新版本的QGIS源码需要从git上下载。最新的发布版是2.0,下载地址见下。https://github.com/qgis/QGIS/tree/release-2_0。打开网页,在右侧有个Download ZIP即可下载2.0的源码zip包,选择一个地方保存即可,如下图。

2、下载、安装和编译QGIS的依赖库

这里只说明安装QGIS必须的依赖库,其他的可选的这里都不说明。首先是编译所需的工具:

CMake >= 2.8.0

Flex

Bison >= 2.4

上面三个工具安装的时候务必安装在没有空格,没有中文的路径里面,然后将安装之后的bin目录添加到环境变量里面,要不然,后面有你受的。不过也没关系,后面有解决方案。接下来是必须要的第三方库:

Qt >= 4.5.0

Proj >= 4.4.x

GEOS >= 3.0

Sqlite3 >= 3.0.0

GDAL/OGR >= 1.4.x

Qwt >= 5.0 & (< 6.1 with internalQwtPolar)

expat >= 1.95

下载地址就不列了,Google搜索,基本上第一个进去就是官网,然后点击下载就可以了。

二、CMAKE配置

下载后解压QGIS-final-2_0_1的压缩包,然后在同级目录新建一个Build目录,用于保存CMake生成的工程文件和编译后的可执行文件。如下图所示。

接下来打开CMake的GUI程序来配置QGIS的工程文件。先将QGIS的源码目录和上面创建的Build目录选进去,如下图所示。

接下来点击Configure按钮,弹出要生成的工程文件类型,我的电脑安装的是VS2008,所以选择Visual Studio 9 2008,如果是其他的,选择对应的即可,如下图。

点击Finish即可开始配置,接下来就会弹出一些错误信息,来告诉你需要设置QGIS所依赖的第三方库的路径等等。如下图:

点击确定之后,发现有很多底色是红色的配置项,这些就是我们需要修改的。

由于这里只编译最基础的QGIS可执行程序,所以其他的插件全部不进行编译,所以我们将分组中的WITH修改为如下图所示。如果你需要编译插件的话,就勾上,同时后面需要设置插件所依赖的第三方库。

接下来,点击Configure按钮,会在最下面的窗口中以红色的字体提示需要设置那些库,比如首先就会提示要设置Flex库的路径。

设置完Flex的路径之后点击Configure,又会提示Bison没有找到,依次设置完,按照这个步骤设置完所有需要设置的第三方库。

接下来提示设置PROJ和GEOS库

接下来是GDAL

点击完Configure之后会出现一大片的红色,如下图所示。不要恐惧,其实里面大多数都是可以不用设置的。

设置SQLite3和spatialindex库的路径

点击Configure后设置Expat的库

点击Configure后设置QWT的库

接下来点击Configure后提示要设置SetupAPI库的路径,这个库在程序安装目录的Windows SDKs目录里面,如我本机的为“C:/ProgramFiles/Microsoft SDKs/Windows/v6.0A/Lib/SetupAPI.Lib”。

接下来点击Configure会提示SPATIALITE错误,如果你有这个库的话,将路径填进去,如果没有,直接将后面的值删除,留空即可(留空的话后面需要修改一部分源代码)。

接下来再点击Configure按钮,如果正常的话,应该就没有错误提示了,输出窗口会输出如下图所示的信息。

然后接下来点击Generate按钮,生成工程文件。这时在输出窗口会输出信息,如果输出信息里面没有错误就说明没问题,警告信息不属于错误信息,最后出现Generate done的字样就说明生成成功。

然后打开Build目录,你会看到生成的sln文件以及其他的工程文件,至此,QGIS编译之前的配置就到此结束。如下图所示。

三、编译

双击Build目录下的qgis2.0.1.sln或者用VS打开该sln文件,等待VS将整个解决方案加载进来。如下图所示。一共由139个项目组成。

接下来就是编译了,整个编译的过程肯定非常的漫长(我没试过)。首先在qgis的工程右键,打开项目依赖项,如下图所示,将与前面打勾的项目流下来,其他的全部卸载掉。

有个快速的方法就是,首先把所有的工程都先卸载掉,然后加载QGIS依赖的几个就可以了,这样编译起来时间比较少,如果你时间比较多就全部编译吧。

我大概筛选了下,qgis依赖的几个工程如下:

名称

说明

qgis

QGIS可执行程序

qgis_analysis

依赖项

qgis_core

依赖项,QGIS核心库

qgis_gui

依赖项,QGIS界面库

ui

QGIS所有的界面

gdalprovider

读取栅格数据驱动

ogrprovider

读取矢量数据驱动

接下来直接在QGIS工程右键编译即可。正常情况下VS会自动先编译QGIS依赖的几个工程,最后编译QGIS。由于两个provider工程,QGIS是通过插件的形式加载的,不会直接依赖,所以需要最后手动编译。

注意:在编译的时候如果没有将GNU的几个软件安装到没有空格的路径中,或者没有加入环境变量path中,很有可能编译出错,错误信息一般如下:

下面我们就通过手动的方式来解决这个问题,首先在工程中找到编译出错的文件。首先来看qgis_core的错误,

1>Generating qgsexpressionparser.cpp
1>E:\QGIS\GnuWin32\bin\bison.exe: m4: No such fileor directory
1>Project : error PRJ0019: 某个工具从以下位置返回了错误代码:"Generating qgsexpressionparser.cpp"
1>生成日志保存在file://e:\QGIS2\Build\src\core\qgis_core.dir\Debug\BuildLog.htm

我们打开上面的BuildLog.htm,会发现下面的文字:

出错的就是上面选中的那句执行的时候出错了,由于bison所在的目录没有安装到环境变量path里面导致的,我们将上面的这句话复制下,然后打开一个cmd命令行窗口,cd到bison的目录,如下图:

然后在窗口中执行上面的那句话,如果没有输出任何信息就说明OK了,然后回到VS中,继续点击生成即可,其他的flex错误类似这样解决即可。

然后由于之前没有配置SPATIALITE,所以我们需要修改源代码,编译的时候提示spatialite.h文件找不到的,将include“spatialite.h”注释掉,然后再次编译会提示有函数spatialite_init、spatialite_version、spatial_ref_sys_init找不到的,将该行注释掉,然后编译即可。

所有的工程编译完之后,会在Build目录下面的output\bin\debug\目录生成dll和exe,然后只需要将QGIS所有依赖的dll拷贝过来就可以双击qgis.exe运行了。依赖的dll主要有gdal、geos、proj、qt、qwt等。需要注意的是,要把gdalprovider.dll和ogrprovider.dll放到exe目录的plugins目录,否则不能打开数据。目录结构如下图。

下面是编译完启动的界面。如果想要界面汉化的话,使用QT提供的Linguist(语言家)工具,打开QGIS源码目录下的i18n目录下面的qgis_zh_CN.ts,然后点击文件菜单下面的发布为,将存储为一个qgis_zh_CN.qm的文件,最后将这个qm文件放到qgis.exe所在目录中新建一个i18n的目录,放到里面重新启动qgis就可以看到界面汉化了。

李民录2013-12-18

QGIS编译的更多相关文章

  1. QGIS编译教程

    注意更新时间:Thursday November 02, 2017 1. Introduction 简介 This document is the original installation guid ...

  2. QGIS 编译

    QGIS 编译 在编译的过程中花费了很长时间,特别是编译Debug版本.release版本的编译可以从晚上找到很多的资料,但是Debug的编译相对较少.在Debug编译的过程中,需要单独build工程 ...

  3. 记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程

    编译运行整个QGIS耗时耗力,由于本人比较愚钝,来来回回花了大概两个星期最终编译成功,记录一下整个过程,一方面备忘,另一方面可能也给别人一点借鉴. 1.准备工作 参考了许多网上的教程,李民录大神的&l ...

  4. QGis、Qt对话框上的OK、Open、Cancel、Help等英文翻译

    成功编译qgis,启动程序发现对话框上的OK.Open.Cancel.Help等依然是英文字段,然后查找源码看这些字段是否都添加到了语言翻译包中: 最后发现这些按钮都是qt的QTGui4库中的QDia ...

  5. 研究QGIS二次开发笔记(一)

    为了在QT程序中嵌入一个地图,最终选择了QGIS来干这件事.选型阶段真是呵呵.我折腾的是QGIS2.4.0. 首先,到官方网站下载安装QGIS.如果你跟我一样懒的话,可能希望下载一个已经编译好的win ...

  6. 【全网首发】使用vs2017+qt5.12.4编译64位debug和release的qgis3.4.9

    一.摘要: 搜索网络没有发现一篇文章完整的介绍如何编译qgis3.4.x的debug版本,官方的指导也长时间不再更新. 所以前前后后花了4天搞定qgis的debug编译,并成功运行,废话不多说,直接上 ...

  7. VS2017+QT5.12.10+QGIS3.16环境搭建及开发全流程

    题记:大力发展生产力,助力高效采集.(转载请注明出处https://www.cnblogs.com/1024bytes/p/15477374.html) 本篇随笔分为五个部分: 一.获取QGIS3.1 ...

  8. QGis+QT5.9+VS2017源码编译

    1.需要软件 VS2017 QT5.9.2 CMake 3.10.2 Cygwin osgeo4w QGIS源码 2.安装VS2017  过程省略 是由于机器上已经安装了VS2017 3.安装QT5. ...

  9. QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

    由于工作要求,今年需要基于Qt搞跨平台的GIS.前期未曾接触过Qt,最近也简单学习了下,开源的QGIS是非常不错的学习资源,下了最新版的QGIS源码,不过在VS2015下却没法直接打开.网上查了很多资 ...

随机推荐

  1. iOS objc_msgSend 野指针Crash 从 Log 提取 Crash 时 selector 的地址和名字并打印

    从 crash stack log 里面,提取 objc_msgSend 关键字,定位是否是野指针问题导致的crash,如果是则打印 crash 时的 objc_msgSend 调用的第二个参数,即 ...

  2. Unity使用UGUI进行VR游戏的界面开发

    原文链接:http://gad.qq.com/article/detail/7181505 本文首发腾讯GAD开发者平台,未经允许,不得转载 我不知道有多少同学是跟我一样,在开发VR游戏中,是使用的面 ...

  3. 利用QrCode.Net生成二维码 asp.net mvc c#

    利用QrCode.Net生成二维码 asp.net mvc c# 里面介绍了.net的方式及js的方式,还不错. 里面用到的qrcode.net的类库下载地址:https://qrcodenet.co ...

  4. 微信小程序发布

    一.操作步骤 (1)打开[微信开发者工具]->新建一个默认项目->点击[项目]->点击[上传] (2)使用微信小程序公众平台管理员扫描二维码,在手机微信上点击[确认上传] (3)输入 ...

  5. 初识gd库

    必备基础 开启GD拓展 列表使用 获取图片信息代码 图片详细信息 特效函数 示例 运行结果 分析 获取图片基本信息 获取图片宽度 获取图片高度 获取图片后缀名 获取图片mime类型 操作图片 添加文字 ...

  6. SpringMVC常用配置(二),最简洁的配置实现文件上传

    Spring.SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4 ...

  7. 为什么函数式编程可以没有while?

    以前想不通,今天在写代码时不知怎么的,偶然就发现了答案.. 比如说把某个字符串s中所有"00"及更长的'00'统统换为'0'.最后结果中不能包含'00'. 00001100--&g ...

  8. pdflush的工作原理

    大家知道,在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上,在下面几种情况下,系统 ...

  9. Xcode8之后,苹果列出了最新App被拒十大原因

    开发者在开发应用程序之前,熟悉苹果审核应用的技术.内容以及设计准则是非常重要的,可以大大降低应用审核被拒的可能性. 最近,苹果通过一个专门的页面给出了截止2016年10月10日应用提交审核被拒的十大原 ...

  10. Building System之 get_abs_build_var() && get_build_var()

    点击打开链接 1.get_abs_build_var() 和 get_build_var()的实现都在build/envsetup.sh中. 2.在buld目录下grep这两个函数可知:这两个函数只在 ...