#QGIS源码官方编译指南

2023-11-17

QGIS源码官方编译指南

将QGIS官方的编译指南windows部分翻译一下,供大家参考。这个版本是QGIS源代码工程中2017年4月30日最后修改的版本,对应QGIS 2.99,也就是即将发布为QGIS 3.0的版本。

翻译:Jacory Gao
版本:2017年4月30日

引言

本文是QGIS软件官方安装指南。本文中所描述的软件和硬件都有注册商标并具有合法使用许可。QGIS使用GNU General Public许可。详细信息可查看QGIS官方网站:http://qgis.org

本文描写的技术细节都经过了笔者最大努力验证,尽管如此,错误也在所难免,因此,所有文字并不做完全保证。笔者和编辑对本文的后果不承担任何责任。欢迎批评指正。

由于QGIS源码每次发布都会有变化,本文介绍的方法应该与发布的版本保持常态化的一致性。本文最新的master分支请见http://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html. 如果你希望编译QGIS的其他版本,请确保使用合适的发布分支。

请访问http://qgis.org 获取加入邮件列表(mailing list)的方法,加入到QGIS工程的构建工作中来。

文档编写人员注意:请将本文作为描述源码编译最主要的文档。请不要删除本提示。
文档编写人员注意:本文是由doc/INSTALL.t2t文件生成,如果想要更改本文内容,请确保更改那个文件,而不是在本文件上做修改。

概述

QGIS, 像许多重大工程一样,使用CMake(http://www.cmake.org)作为源码构建工具。

构建源码需要的依赖库如下所述:

必需工具:
- CMake >= 2.8.6
- Flex >= 2.5.6
- Bison >= 2.4

必需依赖库:
- Qt >= 5.3.0
- Proj >= 4.4.x
- GEOS >= 3.4
- Sqlite3 >= 3.0.0
- SpatiaLite
- libspatialindex
- GDAL/OGR >= 2.0
- Qwt >= 5.0 & (< 6.1 with internal QwtPolar)
- expat >= 1.95
- QScintilla2
- QCA
- qtkeychain (>= 0.5)

可选依赖库:
- GRASS驱动和插件支持 - GRASS >= 6.0.0. QGIS可以和GRASS6或者GRASS7共同编译. 它也可以同时支持这两个版本的GRASS如果安装了rpath的话,具体使用的版本是由LD_LIBRARY_PATH或者PATH变量在运行时决定。
- georeferencer - GSL >= 1.8
- postgis数据库支持 - PostgreSQL >= 8.0.x
- gps插件 - gpsbabel
- mapserver导出以及PyQGIS - Python >= 3.3
- python支持 - SIP >= 4.12, PyQt >= 5.3 并且要与Qt版本吻合, Qscintilla2
- qgis mapserver - FastCGI
- oracle驱动 - Oracle OCI library

间接依赖:
一些由专有格式(例如,ECW,MrSid等)支持需要有相应的第三方库编译支持的GDAL。QGIS不需要任何其他库来编译,但是仅仅支持具有相应依赖的GDAL库来提供数据读写。请参见 http://gdal.org/formats_list.html 查看如何使GDAL支持那些专有格式。

Windows平台编译

使用Microsoft Visual Studio编译

本节描述了如何使用Windows平台下的Visual Studio编译器进行QGIS源码编译。这也是目前QGIS安装版本的编译方式(早期版本使用MinGW编译)。

本节描述了使用Visual Studio编译QGIS需要安装的软件环境

Visual C++社区版

免费的安装程序可以从下面的链接下载:
http://download.microsoft.com/download/D/2/3/D23F4D0F-BA2D-4600-8725-6CCECEA05196/vs_community_ENU.exe

其他工具和依赖

下载并安装以下程序:

工具 网址
CMake https://cmake.org/files/v3.7/cmake-3.7.2-win64-x64.msi
GNU flex, GNU bison 以及 GIT http://cygwin.com/setup-x86.exe (32bit) or http://cygwin.com/setup-x86_64.exe (64bit)
OSGeo4W http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe (32bit) or http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe (64bit)
ninja https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip

OSGeo4W不仅提供了可用的QGIS发布版安装包和master分支的常态化编译版本,也提供了大多数编译QGIS所需的依赖库。

编译QGIS需要从cygwin安装以下软件:
- bison
- flex
- git

以及从OSGeo4W安装以下依赖库(选择Advanced Installation模式):
- expat
- fcgi
- gdal
- grass
- gsl-devel
- iconv
- libspatialindex-devel
- pyqt5
- python3-devel
- python3-qscintilla
- python3-nose2
- python3-future
- python3-pyyaml
- python3-mock
- qca-qt5-devel
- qca-qt5-libs
- qscintilla-qt5
- qt5-devel
- qt5-libs-debug
- qtwebkit-qt5-devel
- qtwebkit-qt5-libs-debug
- qwt-devel-qt5
- sip-qt5
- spatialite

这也会自动选择以上依赖库所需要的依赖项。

如果你安装其他软件包,可能会导致错误。尤其是确保不要安装msinttypes软件包,它会安装stdint.h文件到OSGeo4W[64]/include目录下,进而导致与Visual Studio本身的stdint.h文件冲突,致使编译某些模块失败。

本文早期的版本提供了所有上述依赖库的编译方法,如果你需要的话,可以切回到早期的分支等进行查看。

使用CMake配置Visual Studio工程

本节内容仅供参考,随着OSGeo4W和SDK的更新,本文可能会过时。ms-windows/osgeo4w/package-nightly.cmd被用来常态化编译并更新QGIS,它可能会包含本节没有提到的内容。

新建一个包含下面代码的批处理文件,可以创造一个同时包含VC++和OSGeo4W变量环境的命令行终端环境(假设上述的依赖库都安装在默认位置):

@echo off
set VS90COMNTOOLS=%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\Tools\
call "%PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86

set INCLUDE=%INCLUDE%;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\include
set LIB=%LIB%;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\lib

set OSGEO4W_ROOT=C:\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%;%PROGRAMFILES%\CMake\bin;c:\cygwin\bin

@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

在命令行终端运行这个批处理文件,并使用git检出QGIS源码目录:

git clone git://github.com/qgis/QGIS.git

创建一个’build’目录在别的地方,用来存储源码构建生成的文件。

在终端运行’cmake-gui’命令,并在相应位置填写上源码目录路径,选择QGIS顶层目录。

如果bison和flex的路径为空,你需要使用短路径规则手动填写(例如,C:\Program Files 应该重写为 C:\Progra~n, 这里的n表示使用 dir /x C:\命令时目标文件夹的显示顺序)。

确保‘BINDIGNS_GLOBAL_INSTALL’选项未被勾选,这样当运行INSTALL命令时,Python插件会被放置到输出目录。

单击Configure按钮开始配置工程,选择visual studio 9 2008版本,且保持native compiler选项默认,点击Finish按钮。

配置过程应该不会出现任何错误,这时你可以单击Generate来生成工程文件。

现在,关闭cmake-gui并继续在终端输入vcexpress打开Visual Studio,使用’文件/打开/工程/解决方案’命令打开QGIS工程输出目录下生成的qgis-x.y.z.sln工程文件。

在使用ALL_BUILD工程开始编译QGIS之前,将解决方案配置从Debug更改为RelWithDebInfo(Release with Debug Info)或者Release模式。(否则,你需要安装没有默认包含的debug版本依赖库)

编译完成之后可以使用INSTALL安装QGIS软件到系统中。

使用INSTALL安装QGIS软件默认会安装到c:\Programe Files\qgis目录(可以在cmake-gui中使用CMAKE_INSTALL_PREFIX变量改变这个安装路径)

同时你需要将所有依赖的DLL文件添加到QGIS安装目录,或者将他们分别加入到系统PATH环境变量中。

打包

可以使用’qgis/ms-windows/osgeo4w’路径下名为’creatensis.pl’的Perl脚本文件创建一个独立的安装包程序。它会下载从OSGEO4W下载所有需要的依赖库并利用NSIS将它们重新打包进安装程序中。

这个脚本文件同时支持Windows和Linux运行。

在Debian/Ubuntu平台下,你可以仅安装‘nsis’软件包。

NSIS for Windows可以从下面的链接下载:
http://nsis.sourceforge.net/

Perl for Windows(包括其他像’wget’,’unzip’,’tar’,’bzip2’等依赖库)可以在下面的链接下载:
http://cygwin.com/

打包你自己的QGIS程序

假如你已经完成了以上的打包步骤,如果你想要包含你自己的QGIS可执行程序,你需要使用’creatensis’脚本从Windows安装路径复制他们到ms-windows文件树中。

cd ms-windows/
rm -rf osgeo4w/unpacked/apps/qgis/*
cp -r /tmp/qgis1.7.0/* osgeo4w/unpacked/apps/qgis/

现在创建一个软件包:

./quickpackage.sh

完成以上步骤,你应该就拥有了一个自己的QGIS软件安装包以及在Windows运行它所需要的所有依赖库。

Osgeo4W打包

具体打包过程当前未列出,请参见:
‘ms-windows/osgeo4w/package.cmd’文件

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

#QGIS源码官方编译指南 的相关文章

  • 第7篇 rabbitmq 创建SocketFrameHandler

    本节主要是熟悉socketFrameHandlerFactory类 真正涉及到socket流处理器 展示如下类图 我们本文关心是SocketFrameHandlerFactory 和SocketFrameHandler 由类图可以知道Soc
  • 迁移学习源码全注释 - 《Tensorflow 实战 Google 深度学习框架》源码注释

    学习迁移学习源码 做了完全版本注释 以做记录 coding utf 8 Created on Mon Dec 25 12 30 25 2017 需要提前下载训练好的 Inception V3模型 以及对应的数据文件 author Admin
  • 谷歌chrome浏览器的源码分析(一)

    随着网络技术的发展 越来越多应用都已经离不开网络 特别像人类大脑一样的知识库的搜索引擎 更加是离不开功能强大的云计算 不过 即便云计算非常强大 但它还不能直接地把结果呈现给用户 这样就需要一个客户端来呈现出来 这个客户端就是浏览器 现在越来
  • jdk8源码之Queue-ArrayQueue

    关于队列这个数据结构 大家应该都是比较熟悉 列队是一种先进先出 FIFO 的数据结构 删除操作只能在表的头部 插入操作只能在表的尾部 Queue一般是作为一个缓冲队列使用的 简单举例 生产端的生产速度偶尔会大于消费端的消费速度 但又不想等待
  • spring boot配置类注册深入解析

    前言 spring ApplicationContext的刷新总体来看有两个过程 第一个是注册BeanDefinition 提供整个IOC容器初始化的材料 第二个是根据BeanDefinition加载bean 从spring boot开始
  • VT是什么?怎么打开教程

    装过虚拟机的朋友都知道 要想虚拟出cpu 就必须电脑打开VT VT指的是CPU的虚拟化技术 有了它就可以单CPU模拟多CPU并行 这样才可以虚拟出电脑出来 而如果你的bios没有打开VT的话 是不能创建虚拟机的 下面就教大家怎么打开VT 1
  • klocwork 2020.3安装使用过程

    klocwork 2020 3 1 安装过程略过 可查看2019的安装过程 2 web分析 存在漏报的问题 可能是规则选择不全 3 desktop分析 4 嵌入式环境插件分析 e mail lu1024lu foxmail com
  • qq键盘快捷键大全

    qq键盘快捷键大全 Ctrl A 全选 Ctrl B 整理收藏夹 Ctrl C 复制 Ctrl D 删除 添加收藏 在Word中是修改选定字符格式 在IE及傲游 中是保存为收藏 Ctrl E 搜索助理 在Word中是段落居中 Ctrl F
  • vscode前端常用插件 最新版

    1 不需要安装的插件 序号 名称 作用 settings json配置 1 Auto Rename Tag 自动关闭标签 editor linkedEditing true 2 Auto Close Tag 标签自动闭合 html auto
  • Blow Up 3macOS图片放大锐利的详细使用教程与安装方法

    软件介绍 Blow Up 3 macOS是一个Photoshop和Lightroom插件 亲测有效 适合于Adobe Photoshop CS6和Adobe Photoshop CC 2015或更高版本 Adobe Lightroom 6或
  • QGis二次开发 -- 源码编译终极篇

    由于是开源软件 QGis版本迭代比较快 在保持long term release版本的基础上 每个月都会有一个monthly release的新版本发布 源码工程变化快速 给想要上手编译开发的新人朋友带来了一些困惑 我之前分别写过QGis1
  • 软件项目管理

    目录 前言 项目管理概述 项目与软件项目 项目管理与软件项目管理 项目管理知识体系 过程管理与软件项目管理的关系 软件项目管理过程 项目初始 项目确立 项目立项 项目招投标 项目授权 敏捷开发总结 scrum模型 迭代式增量软件开发过程 术
  • arm鲲鹏服务器和x86区别

    华为云服务器x86计算和鲲鹏计算的区别是什么 X86和鲲鹏指的是两个系列的中央处理器架构 x86采用复杂指令集 CISC 鲲鹏采用精简指令集 RISC pc6a学习分享小白详细说明一下这2种服务器的差别 一 鲲鹏和X86处理器架构对比 1
  • 投资捕鱼游戏市场的如何避雷?以及研发技术问题。

    随着国内捕鱼市场在姚记科技 波克城市 途游等捕鱼龙头的深耕下 整个产品的研发 运营门槛都了非常大的提高 对于目前想要研发出一款具有竞争力的产品和版本 投入低于500万的资金很难出有竞争力的产品 加上运营门槛的提高 运营成本至少需要准备500
  • 从本地目录(即不是来自 git 存储库)在 R 传单中渲染自定义图块

    我使用 Qgis 中的 Qtiles 插件从一个非常大的栅格中创建了一些图块 我已将它们保存到计算机上的本地目录中 现在想使用 R 将它们渲染在传单地图中 The addTiles函数传递一个 URL 但似乎不适用于本地文件路径 在另一篇文
  • Python - 字典3

    修改字典项 您可以通过引用其键名来更改特定项的值 示例 将 year 更改为 2018 thisdict brand Ford model Mustang year 1964 thisdict year 2018 更新字典 update 方
  • Navicat关闭自动检查更新版本教程

    Navicat关闭自动检查更新版本教程 首先 点击菜单中的工具菜单 弹出了下拉菜单选中为选项 点击选项 首先 点击菜单中的工具菜单 弹出了下拉菜单选中为选项 点击选项 去掉勾选上在启动时自动检查更新选项
  • 病案管理的定义、流程及应用分析

    病案管理是指针对病人的基本信息 病历 就诊记录等进行收集 整理 存储 分析和应用的一项管理工作 它在医院 医疗机构和医疗行业中具有重要的作用 能够提高医疗服务的质量 效率和安全性 本文将就病案管理的定义 流程以及其在医疗健康领域中的应用进行
  • C 语言运算符详解

    C 语言中的运算符 运算符用于对变量和值进行操作 在下面的示例中 我们使用 运算符将两个值相加 int myNum 100 50 虽然 运算符通常用于将两个值相加 就像上面的示例一样 它还可以用于将变量和值相加 或者将变量和另一个变量相加
  • 阿拉伯标签在 Geoserver 中无法正确显示

    我已随 Tomcat 安装了 geoserver 但文本标签无法正确显示 我在哪里可以设置geosever中的阿拉伯编码 标签在 QGIS 中显示得很好 但是当我将其发布到 geoserver 中时 我遇到了这个问题 1 https i s

随机推荐

  • Matplotlib绘制漂亮的饼状图

    python绘图系列文章目录 往期python绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取exc
  • 【满分】【华为OD机试真题2023 JAVA&JS】计算网络信号

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 计算网络信号 知识点广搜数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 网络信号经过传递会逐层衰减 且遇到阻隔物无法直接穿透 在此情况下需要计算某个位置的网
  • MISC方向MeowMeowMeow解题方法

    下载好附件后 通过好多工具都没有找到flag 突发奇想通过010工具打开MeowMeow png 发现了一堆乱码 当划到最下面的时候 发现了那些乱码有一定的规律 这个时候向上找 找到最开始出现规律的位置 会发现与题目给的flag格式CatC
  • 1001 害死人不偿命的(3n+1)猜想 (15 分)

    1001 害死人不偿命的 3n 1 猜想 15 分 卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1
  • 函数模板全特化与偏特化

    模板为什么要特化 因为编译器认为 对于特定的类型 如果你能对某一功能更好的实现 那么就该听你的 模板分为类模板与函数模板 特化分为全特化与偏特化 全特化就是限定死模板实现的具体类型 偏特化就是如果这个模板有多个类型 那么只限定其中的一部分
  • 7 个非常实用的 Vue.js 库

    编辑整理 杨小爱 我们在开发项目的时候 为了提升开发效率 会经常使用一些实用的开发库 而Vue js 又是前端领域中很受欢迎的框架之一 因此 就有很多开发者开发了各种实用的库 在这里 我整理了 7 个觉得好用的 Vue js 库 希望这些库
  • Acwing 795. 前缀和

    include
  • Go测试学习

    前言 textcolor Green 前言 前言 这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 从这个专栏里面可以迅速获得Go的知识 Go测试学习 03 测试 3 1 单元测试 3 1 1 单元测试 规则 3 1 2 单元测试 例
  • Linux安装Tomcat详细教程

    一 安装前提 Tomcat依赖于Java环境 所以在运行Tomcat之前 我们需要提前配置好Java环境变量 可以参考以往教程 Linux安装Java详细教程 注 Tomcat和Java使用版本最好保持一致 如果用的JDK1 8 那么最好就
  • 三维模型3DTile格式轻量化压缩模型变形浅析

    三维模型3DTile格式轻量化压缩模型变形浅析 在对三维模型进行轻量化压缩处理的过程中 常常会出现模型变形的现象 这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素 以下将对此现象进行详细分析 首先 我们需要了解三维模型轻量化压缩的
  • 有限自动机总结

    有限自动机A用来识别字符串 它由5部分组成 1 alphabet 字符集 2 states 状态集合 3 init 初始状态 4 trans s ch 状态转移函数 5 end 可接受state 集合 A str true的意思是 A可以接
  • unity中mathf.Lerp的运用

    在unity3d中经常用线性插值函数Lerp 来在两者之间插值 两者之间可以是两个材质之间 两个向量之间 两个浮点数之间 两个颜色之间 其函数原型如下 1 Material Lerp 插值 function Lerp start Mater
  • 03目标检测-传统方法与深度学习算法对比

    一 目标学习的检测方法变迁及对比 目标检测 是当前计算机视觉和机器学习领域的研究热点 从Viola Jones Detector DPM等冷兵器时代的智慧到当今RCNN YOLO等深度学习土壤孕育下的GPU暴力美学 整个目标检测的发展可谓是
  • 在SpringBoot中使用百度AI,实现通用图片识别(身份证识别也通用)

    现在网上有好多第三方使用的文章 但是没几个是可以使用的 本片文章可以放心使用哦 3 1 先去百度ai官网注册一个账号 2 选择我们需要使用的功能 3 因为我们这个是测试使用 他每天会有很多次免费使用的次数 因此完全够用 4 去领取我们需要的
  • 结巴分词jieba添加自定义词典

    结巴分词添加自定义词典 有时候很有必要 比如下面这段话 test text 我们的健康码也是绿色的 这凭什么就限制我们的就医 如果使用默认的分词 那么 健康码 这个词会分成 健康 和 码 这里可以使用词典方式 添加自定义词典 新建一个txt
  • mysql写存储过程插入数据

    DROP PROCEDURE if exists insert emps test 下面就开始创建存储过程插入数据 DELIMITER 不加这个会报错 坑了我两个小时CREATE PROCEDURE insert emps test IN
  • C#分段读取超大文本文件

    一 概述 通过C 分段读取和操作超大内存的文本文件 保证操作大于3GB的txt时内存不会爆 包括获取txt文件总行数 按行分段等 二 操作流程 1 读取文件总行数 获取txt的总行数 public int GetTunnelInfos st
  • 【Qt&OpenCV 图像的形态学变换 morpholgyEx】

    腐蚀用于分割 isolate 独立的图像元素 膨胀用于连接 join 相邻的元素 腐蚀 膨胀可用于去噪 低尺寸结构元素的腐蚀操作很容易去掉分散的椒盐噪声点 图像轮廓提取 图像分割 寻找图像中的明显的极大值区域或极小值区域 高级形态学变换 开
  • react route和Switch的区别 +嵌套路由

    Router 指定路由规则 Router默认也是模糊匹配 Router的path可以不写 如果不写 表示该组件一定匹配 Switch 选择 开关 Switch中只有一个组件能匹配 只会显示第一个匹配的组件 exact 表示精确匹配
  • #QGIS源码官方编译指南

    QGIS源码官方编译指南 将QGIS官方的编译指南windows部分翻译一下 供大家参考 这个版本是QGIS源代码工程中2017年4月30日最后修改的版本 对应QGIS 2 99 也就是即将发布为QGIS 3 0的版本 翻译 Jacory