QGIS2.18+Qt5.9+VS2015编译

下图是编译结果用到的库版本图:


对于刚开始编译这玩意的人来说,一个字:难;两个字:真难;三个字:变态难。刚开始我也是这样,整了好长时间。掌握方法,知道怎么解决错误,其实也没有多难,相信自己大笑。 
也要谢谢这两位博主: 

https://www.cnblogs.com/xiaojian1987/p/8342104.html 
https://blog.csdn.net/u012016149/article/details/51813403

下面从这几个方面介绍:

  • 下载相关库
  • Cmake生成VS工程文件
  • 编译工程文件及问题解决

1.下载相关库

这个没有什么可以讲的,其他博主也都列出来了,这个其实不用自己一个个下载编译,通过osgeo4w工具,下载qgis就可以把大部分的依赖库都下载下来,如果缺少哪个库,再单个下载就行了。

2.Cmake生成VS工程文件 

(1)配置环境变量 
配置环境变量可以参考别的博主,其中要说一点GRASS_PREFIX环境变量,该环境变量中路径中分隔符应为“/”不能为“\”。 

(2)库的配置 

这个根据提示要求选择相应的库即可,下面是我的库配置截图:

其中在选择proj库的时候,选择proj_i.lib库,后面带i的。 
(3)生产VS工程文件 

当所有的库都配置好,Configure完成之后,点击Generate按钮生成VS工程文件。 


3.编译 
打开vs工程文件进行编译,我的工程个数有216个,比较多。先编译qgis_core工程,因为别的工程会依赖qgis_core库。 
下面列举一下我在编译过程中遇到的问题: 
(1)error C2001: 常量中有换行符
解决方法:文件–>高级保存选项:选择unicode(utf-8带签名) 


(2)C2371“int8_t”:      重定义;不同的基类型

解决方法//typedef __int8 int8_t; 改为 typedef signed __int8 int8_t;(添加个signed

(3)编译qgis_core工程时:出现qgisgeometry.cpp的#include <netinet/in.h>找不到

解决方法:我是注释掉的。
或者

(3)编译qgis_app时,出现:无法打开“unistd.h”文件

解决方法:由于是在win系统下编译,出现这种问题很正常。把unistd.h复制到osg4w的include目录下,问题解决。

(4)出现许多: LNK200:无法解析的外部符号,文件是proj.lib
解决办法:右键属性-->链接器-->输入-->附加依赖项:proj.lib改为proj_i.lib。
(5) MSVCRT.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain
解决方法:输入-->附加依赖项:添加qtmain.lib库。

(6) 运行时提示缺少dll
解决方法:把将OSGeo4W64\apps\Qt5\bin下的dll全部拷贝到同目录下,启动qgis.exe
(7)出现下图错误:

解决方法:将OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夹拷贝到刚才的目录即可。

(8)编译成功后启动程序会发现,功能按钮没有图标,如下图:

解决方法:运行的时候程序找不到正确支持图标格式(svg)的库文件。这里需要把相应的库文件拷到主程序文件夹中,C:\Qt\Qt5.9.0\5.9\msvc2015_64\plugins\imageformats的imageformats文件夹拷到qgis.exe目录下。

结果如下图:

(9)整个工程编译完了,如果后来需要二次开发,就需要提取开发包,将INSTALL设置为启动项,然后编译,可能会出现问题:error MSB3073: 命令“setlocal
解决方法:以管理员身份运行VS2015即可。
(10)运行时出现:QWidget:Must construct a QApplication before a QWidget错误
解决方法:看看是不是有的引用库使用混淆了(debug的库还是release的库,区分:后面有d的是debug版本库,没有则是release库)。

Enjoy!!!






  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟云之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值