记录编译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 ...
随机推荐
- throws声明异常中断式处理异常
1.throws 编译期异常,一直往上抛最后是JVM处理(打印并中断程序) 2.声明多个或者直接声明父类
- jQuery判断多种数据类型
1.判断是否为数组类型 var obj=[0]; alert((typeof obj=='object')&&obj.constructor==Array) 2. 判断是否为字符串 ...
- 数据结构与算法——平衡二叉树(AVL树)
目录 二叉排序树存在的问题 基本介绍 单旋转(左旋转) 树高度计算 旋转 右旋转 双旋转 完整代码 二叉排序树存在的问题 一个数列 {1,2,3,4,5,6},创建一颗二叉排序树(BST) 创建完成的 ...
- CodeForce-792C Divide by Three(数学)
Divide by Three CodeForces - 792C 有一个正整数 n 写在黑板上.它有不超过 105 位. 你需要通过删除一些位使得他变成一个美丽的数,并且需要删除尽量少的位数.删除的 ...
- PHP的可变变量与可变函数
什么叫可变.在程序世界中,可变的当然是变量.常量在定义之后都是不可变的,在程序执行过程中,这个常量都是不能修改的.但是变量却不同,它们可以修改.那么可变变量和可变函数又是什么意思呢?很明显,就是用另一 ...
- discuz连接微博登陆,第三方登录
首先记一下discuz的ucenter的架构: ucenter 是用户中心.其他的应用都是和ucenter连接,包括discuz也是ucenter的一个应用(默认的); 第一步: 在ucenter新建 ...
- JDBC-2(CRUD)
3.PreparedStatement实现CRUD 3.1 操作和访问数据库 数据库连接被用于向数据库服务器发送命令和SQL语句,接受数据库服务器返回的结果.(一个数据库连接就是也给Socket连接) ...
- Modern PHP interface 接口
The right way /dev/hell Code Response.php 接口 demo: modern-php/├── data│ └── stream.txt└── interfac ...
- PHP 处理历史数据的伪代码
<?php class a { protected static $Senior = [1, 2, 3]; protected static $NoSenior = [13, 14, 15, 1 ...
- jquery 设置django全局token
通过JQUEYR中的ajaxSetup,来设置django中的token,即不需要再每次都去引用: 第一步: 先django中的html中设置 {% csrf_token %} 第二步: 新一个js ...