当前位置: 代码迷 >> 综合 >> QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6
  详细解决方案

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6

热度:52   发布时间:2023-12-13 01:24:31.0

一、参 考
李民录老师:
http://blog.csdn.net/liminlu0314/article/details/17400075
Jacory Gao:
http://blog.csdn.net/deirjie/article/details/48216773
QGIS官网:
https://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html#toc14
简单程序员:
https://www.cnblogs.com/xiaojian1987/p/8342104.html

二、软件下载
1、工具软件

(1)Cmake:主要用于编译,从官网直接下载即可
https://cmake.org/download/
(2)Cygwin:用于下载bison,flex软件
https://cygwin.com/install.html
(3)OSGeo4w:用于下载QGIS依赖库
http://trac.osgeo.org/osgeo4w/
(4)QGIS源码

https://www.qgis.org/en/site/forusers/download.html

2、Cygwin的安装






 注意:未下载的前面显示"skip",点击会变成具体的版本,我这里是"keep",因为我之前下载过,按照上面的说明,下载flex、bison,上面的路径不要有中文或空格。

3、OSGeo4w的安装 






说明:(1)这里的操作和Cygwin基本一致;(2)Search输入要下载的内容,具体包含:expat,fcgi,gdal,grass,gsl-devel,iconv,libzip-devel,libspatialindex-devel,pyqt5,python3-devel,python3-qscintilla,python3-nose2,python3-future,python3-pyyaml,python3-mock,python3-six,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,oci,qtkeychain,libzip,qjson。


三、Cmake配置
1、创建batch文件
如果上述的包在默认的路径下安装(batch文件后缀名为bat),bat文件为:

@echo off
set VS140COMNTOOLS = D:\work\AZWJ\VS\Common7\Tools\
call "D:\work\AZWJ\VS\VC\vcvarsall.bat" x64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib
set OSGEO4W_ROOT=D:\work\AZWJ\QGISSELF\OSGeo4w
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;D:\work\AZWJ\VS\VC\bin
path %PATH%;D:\work\AZWJ\QGISSELF\cmake\cmake\bin;D:\work\AZWJ\QGISSELF\cygwin\bin
@set GRASS_PREFIX=D:/work/AZWJ/QGISSELF/OSGeo4w/apps/grass/grass-7.4.0
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
@cmd

说明:上面的路径要根据自己的实际情况,做适当地改变,特别是我红色标注的地方,做好这一步后面会省去很多事情。(1)VS140COMNTOOLS表示VS15,call后续跟的X64表示64位编译;(2)Include表示头文件,这里加了Win10系统的sdk;Lib表示编译的动态库;(3)Path表示环境变量;(4)特别注意:GRASS_PREFIX的路径地址必须是“/”,Path路径多个;之间不能有空格。

2、配置
启动cmd,进入命令行窗口,先执行上面的bat文件,然后进入cmake。


说明:点击Configure之后会遇到错误,很容易解决,这里就不一一解决了,下面是我的最终截图:






四、编译
1、将debug模式改为ReWithdebInfo



2、移除不依赖的项目,保留依赖项目,将qgis设置为启动项

3、全部编译后,生成的所有文件在Build->output->bin->RelWithDebInfo目录下,截图如下:


五、主要问题

1、WinMain问题
在编译qgis工程时,会出现Winmain程序入口问题,因为新建项目的时候选择的是控制台应用程序,控制台应用程序的入口是main。而在.CPP文件中提供的是windows入口函数WinMian。


解决方法:


2、启动qgis.exe 提示缺少各种dll文件,可以将OSGeo4W64\apps\Qt5\bin下的dll全部拷贝到同目录下,也可以把这个bin路径设置到环境变量下。

3、再次启动qgis.exe 会出现下面的问题


解决方法:将OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夹拷贝到刚才的目录即可,截图如下:
4、再次启动,成功。

4. 在编译qgis_core时提示找不到<netinet/in.h>,注释掉即可。
5. 提示有常量符,改成下面的样子就好了。

  相关解决方案