QGIS编译

2023-11-18

一、准备工作

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QGIS编译 的相关文章

随机推荐

  • 论文解读:Personalize Segment Anything Model with One Shot

    发表时间 2023 5 4 项目地址 https github com ZrrSkywalker Personalize SAM 体验地址 https huggingface co spaces justin zk Personalize
  • FFMPEG 合并视频文件(无损)

    FFMPEG 合并视频文件 无损 前言 最近在做视频转码相关业务 但是片源商给了一些DVD的零散视频片段 需要自己去合并片段并进行业务转码 本篇文章主要记录视频合并的过程及常见的合并方式 环境 FFMPEG BUILDS 4 4 1 FFm
  • [Pytorch系列-62]:生成对抗网络GAN - 基本原理 - 自动生成手写数字案例分析

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121914862 目录 第1章 基本原
  • 这三款软件让你轻松实现在线扫花识别植物

    如今 鲜花是我们日常生活中最常见的植物 但是随着鲜花种类的不断增多 它的许多的种类信息 想必大多数的朋友都难以认识清楚 因此 有的人就会使用一些识别鲜花的APP来帮助我们通过拍照而轻松获知鲜花的信息 那么你们知道识别鲜花的APP都有哪些吗
  • 小型中文版聊天机器人

    入门小菜鸟 希望像做笔记记录自己学的东西 也希望能帮助到同样入门的人 更希望大佬们帮忙纠错啦 侵权立删 目录 一 简单介绍与参考鸣谢 二 数据集介绍 三 数据预处理 1 重复标点符号表达 2 英文标点符号变为中文标点符号 3 繁体字转为简体
  • 【华为OD机试真题 Python语言】5、TLV解析

    文章目录 一 题目 题目描述 输入输出 样例1 二 思路参考 三 代码参考 作者 鲨鱼狼臧 个人博客首页 鲨鱼狼臧 专栏介绍 2023华为OD机试真题 使用Python进行解答 专栏每篇文章都包括真题 思路参考 代码分析 订阅有问题后续可与
  • Ansible 的脚本 --- playbook 剧本

    Ansible 的脚本 playbook 剧本 playbooks 本身由以下各部分组成 编写yaml文件示例 运行playbook 定义 引用变量 指定远程主机sudo切换用户 when条件判断 迭代 Templates 模块 1 先准备
  • 测试平台简介

    测试平台简介 一 被测系统介绍 被测系统为电商后台管理系统 功能模块包括 商品管理 订单管理 会员管理等 登录需要验证码 因没有后台代码 绕不开登录 只能手动获取到cookie 填充进测试用例 遇到真实项目 cookie这块逻辑需要再改造
  • Moonbeam与Nodle网络集成,增添物联网功能

    领先的波卡跨链互连开发平台Moonbeam近期宣布与Nodle Network达成XCM集成 将NODL Token带到Moonbeam生态之中 本次集成将会开启波卡中Moonbeam和Nodle网络以及通过Moonbeam互连合约相连的远
  • 如何在Swift开发中使用CocoaPods导入的第三方库

    今天在用swift写项目时 需要用CocoaPods引入SDWebImage这个三方库 于是开始在Vim命令中创建pod file 在创建之前需要cd到当前项目的目录中 Podfile创建步骤如下 1 创建Podfile touch Pod
  • Selenium自动化测试工具的介绍与使用

    Selenium自动化测试 什么是自动化测试 自动化测试指软件测试的自动化 在预设状态下运行应用程序或者系统 预设条件包括正常和异常 最后评估运行 结果 总的概括即 将人为驱动的测试行为转化为机器执行的过程 进入今天的主角 selenium
  • MSP430F5529学习笔记(1)——环境配置

    CCS下载链接 MSP430F5529官方教学视频 目录 下载 新建工程 创建文件 重要部分按钮介绍 project Explorer没有 下载 我们编写MSP430F5529的程序 需要使用到CCS这个软件 我们进入官网之后 界面如下 点
  • 实时系统HBase读写优化--大量写入无障碍

    在使用hbase过程中发现在写入hbase的数据量很大时 经常发生写不进去的情况 而我们基于hbase的应用是对实时性要求很高的 一旦hbase不能读写则会大大影响系统的使用 下面将记录hbase写优化的过程 1 禁止Major Compa
  • java多线程:线程池和阻塞队列

    一 线程池定义和使用 jdk 1 5 之后就引入了线程池 1 1 定义 从上面的空间切换看得出来 线程是稀缺资源 它的创建与销毁是一个相对偏重且耗资源的操作 而Java线程依赖于内核线程 创建线程需要进行操作系统状态切换 为避免资源过度消耗
  • 微博网站分享按钮

    div class bdsharebuttonbox a class bds weixin a a class bds sqq a a class bds tsina a div
  • Grid布局20行代码快速生成瀑布流

    网格布局 Grid 布局 好用又简单 至少比 Flex 要人性化一点 美中不足就是浏览器支持度差点 DOM结构 中间夹层为了后续拓展 CSS grid display grid grid template columns repeat 2
  • 学习lua结合unity遇到错误信息的解决方法

    require uiDefine 报错信息 module uiDefine not found no fieldpackage preload uiDefine no such builtin lib uiDefine 解决方法 在requ
  • 全国青少年软件编程等级考试标准(正式级)

    简介 说明本标准由中国电子学会科普培训与应用推广中心和北京大学信息科学技术学院共同制定 由全国青少年电子信息科普创新联盟标准工作组参与开发 由中国电子学会普及工作委员会审核通过 适用于由中国电子学会举办的全 说明 本标准由中国电子学会科普培
  • Python 汇总两张excel表格:分解excel复杂表头,比对汇总表和子表异同项目,生成仅含相同项的汇总表和填充异同项目的子表

    在工作中遇到需要将子表项目添加到汇总表中 存在以下特点 工作中遇到需要将子表项目汇总到汇总表中 存在以下特点 1 表头复杂 存在合并的单元格 考虑分解单元格并填充空白单元格 2 子表中存在汇总表没有的项目 考虑将子表分别标示异同项目 创建辅
  • QGIS编译

    一 准备工作 1 下载QGIS源码 最新版本的QGIS源码需要从git上下载 最新的发布版是2 0 下载地址见下 https github com qgis QGIS tree release 2 0 打开网页 在右侧有个Download