记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程
编译运行整个QGIS耗时耗力,由于本人比较愚钝,来来回回花了大概两个星期最终编译成功,记录一下整个过程,一方面备忘,另一方面可能也给别人一点借鉴。
1、准备工作
参考了许多网上的教程,李民录大神的《QGIS编译》
https://blog.csdn.net/liminlu0314/article/details/17400075;
《QGIS编译--QGIS3.03+VS2017(64)+QT5.92源码编译过程及二次开发准备经验》 https://www.e-learn.cn/content/qita/1241748;
等等好多教程。
需要安装的软件有
1)cmake
链接地址:https://cmake.org/download/,下载一个cmake的软件,本项目使用cmake进行构建的。
2)vs2015
在VS官网下载vs2015的社区版
3)GNU flex, GNU bison
这两个库使用cygwin(链接地址http://cygwin.com/setup-x86_64.exe )下载安装。
4)OSGeo4W
地址:http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe
可以从这个软件上下载qgis安装需要的第三方库,主要有下面这些库
Gdal,Geos,Proj4,Sqlite3,Spatiallite,spatialliteindex,expat,qca,qwt,Qwtpolar,Qscintill,注意在安装的时候要选择Advanced Install的模式

5)Qt
Qt的库既可以是从OSGeo4W上直接下载,也可以在qt官网上安装,在配置的时候把路径写正确就可以了,我使用的是从OSGeo4W上下载了qt5.11.2的版本。
2、构建QGIS程序
可以使用git下载,也可以直接在github上下载qgis的源码,我选择的是qgis3.4的分之,直接编译maste编译的时候出了点问题,就是用了该版本编译。
下面就是使用cmake构建qgis了,
1) 打开cmake-gui界面

选好源码路径和构建路径,点击configure选择VS2015 64位进行配置,会出现一系列的库路径需要配置,基本都是在OSGeo4W中已经下载的库,如果没有下载,搜索后下载即可我最后配置成功的库目录如下,其中还需要配置的就是SETUP_LIBRARY路径:
C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib/x64/SetupAPI.Lib

有的版本总是提示spatiallite的版本过低,可以跳过改库的配置,在编译的时候加上即可。
所有的配置完成不再提示错误后,点generate生成vs2015的项目,构建完成。
3、编译QGIS项目
VS2015打开QGIS 项目后有三百多个工程,先编译基本的项目,根据其它的教程提示,先编译的库有
qgis_core,qgis_gui,qgis_app,qgis_native,qgis_analysis,ui,qgis七个基础项目再加上,libsxfrw,gdalprovider,ogrprovider插件项目一共十个。
首先编译qgis_core项目,该项目编译成功后面的项目就相对比较简单了。
出现的问题:
1)编译过程中总是提示:error C2001:常量中有换行符,在网上搜了一些答案,总结原因应该是VS的IDE对无BOM头的utf-8编码格式支持不完善造成的问题,解决方式有两种:可以将有中文字符的文件转换为带BOM头的utf-8格式的文件,或者是按照网上别人说的在””包括的中文字符后面加空格可以解决该问题。
2)另外一下显示无法找到某个头文件或者链接时候缺少某个库直接在增加include目录或者是库文件就行了,如我在编译的时候遇到一个头文件找不到的现象,发现该头文件在C:\OSGeo4W64\include\spatialindex目录下,直接包含该目录即可

之前的spatiallite没有配置成功的可以在此处配置上。
4、运行qgis项目
编译完成后,将qgis设为启动项目,直接运行,发现出现了一个问题无法加载qgis_app.dll库,这个地方搞了好久都不知道原因,查看了很多网上的教程才发现需要因为qgis_app.dll需要的很多动态库运行时找不到,所以无法加载成功需要把C:\OSGeo4W64\bin以及C:\OSGeo4W64\apps\Qt5\bin下的动态库全部拷贝到exe目录之下才能启动。建议在运行之前通过depends软件检查一下qgis_app.dl是否缺少依赖再运行。
再次启动提示如下错误no Qt platform plugin could be initialized错误,需要将C:\OSGeo4W64\apps\Qt5\plugins下的platforms拷贝到exe目录之下.

至此,成功启动qgis。

5、后续问题
启动完成后,后续就是中文汉化和界面图标没显示的问题,需要再进一步处理。
记录编译QGIS(3.4+Qt5.11+VS2015)的整个过程的更多相关文章
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)
后记: 由于自己low,没有下载罪行的python3.2导致编译上遇到种种问题,后文可以参考,建议看: <Windows7 VS2015 下编译 PythonQt3.2> https:// ...
- Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索
时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...
- Qt5.11.2 VS2015编译activemq发送程序 _ITERATOR_DEBUG_LEVEL错误和崩溃解决
1.问题描述: 运行环境是 win10 64位系统,开发环境是VS2015 ,Qt 5.11.2.开发activemq发送程序,遇到问题 (1)Qt5AxContainer.lib error LNK ...
- QT学习笔记1:VS2015配置QT5.11
由于工作关系,我又接触到了QT,在之前写过一篇博客是 在vs2017下配置openCV,当时用的是2015做的示范,现在就继续记录一下在VS2015下配置QT吧(VS2017配置是一样的) 第一部分: ...
- WIN10+QT5.9+VS2015编译RedisDesktopManager
原文:WIN10+QT5.9+VS2015编译RedisDesktopManager 官方源码编译安装说明地址:http://docs.redisdesktop.com/en/latest/insta ...
- qt5.11.2+vs2017环境下配置pcl1.8.1以及第三方依赖库vtk的编译
1.准备工作 我所用的开发环境是win10下的qt5.11.2配置了vs2017的编译器,根据自己所用的VS的版本去官网下载对应版本的pcl库,如下 PCL-1.8.1-AllInOne-msvc20 ...
- qt5.11.2+vs2017环境下opencv3.4.1编译配置
OpenCV是一个开源的计算机库,它可以帮助视觉工作者做很多富有创造性的工作,在图像处理领域扮演着重要的角色.由于opencv3.x的存在,不管你是学生还是研究人员,是专家还是初学者,都可以快速的建立 ...
- Qt5.11.1安装与VS2017配置
Qt5.11.1安装与VS2017配置 转 https://blog.csdn.net/gaojixu/article/details/82185694 文章目录 Qt5.11.1安装与VS2017配 ...
- Ubuntu18.04中配置QT5.11开发环境
准备工作 参考 https://wiki.qt.io/Install_Qt_5_on_Ubuntu . # 安装g++ sudo apt install build-essential # sudo ...
随机推荐
- Fastjson 1.2.22-24 反序列化漏洞分析(1)
Fastjson 1.2.22-24 反序列化漏洞分析(1) 前言 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转 ...
- 学习PHP中的目录操作
对于编程语言来说,文件和目录的操作是其最最基础的功能.就像我们日常中最常见的图片上传.文件上传之类的功能,都需要文件和目录操作的支持.今天我们先来简单地学习一下 PHP 中关于目录操作的一些类和函数. ...
- 解决dede编辑器不能保存word文档样式问题
ckeditor在dede里不能保存样式,试过多种解决办法都还是没有解决.最终将编辑器换成FCK得到解决. 第一步:下载FCK编辑器 下载地址: 链接: http://pan.baidu.com/s/ ...
- Shell系列(36)- for循环语法二简介及批量添加删除用户
for循环语法二 for ((初始值;循环控制条件;变量变化)) do 程序 done 例子 例子-1 求和工具 需求:根据用户输入的数字,求1~输入所有数字的和 脚本: #!/bin/bash re ...
- 解决跨域、同源策略-React中代理的配置
React中代理的配置 主要是解决同源策略的问题 何为同源策略? 因为我们React在3000端口,Vue在8080端口,而后台接口往往在5000,这种不同的端口之间就是一种跨域的问题了 axios发 ...
- python 语法规范
在python shell 中输入 import this 可以看到python之禅 The Zen of Python, by Tim Peters Beautiful is better than ...
- selenium下拉选择框处理
HTML: (一)通过xpath层级标签定位 driver.find_element_by_xpath(".//*[@id='Resolution']/option[2]").cl ...
- qt5 打包exe执行文件
1.pyinstaller 安装 :pip install pyinstaller 执行:pyinstaller -F -w --icon=logo.ico xx.py 打包后的文件 在 dist 下 ...
- 防刷功能的实现(thinkphp5)
$seconds = '3'; //时间段[秒] $refresh = '3';//最大次数 $cur_time = time(); if(Session::get('refresh_times')) ...
- CF917D-Stranger Trees【矩阵树定理,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/CF917D 题目大意 给出\(n\)个点的一棵树,对于每个\(k\)求有多少个\(n\)个点的树满足与给出的树恰好有 ...