QGIS编译---QGIS2.18.18 + Qt5.8.0 + VS2015(X64) + Python3.6

参考链接:

https://blog.csdn.net/octdream/article/details/70332428

https://blog.csdn.net/quinta_2018_01_09/article/details/79084001

https://www.cnblogs.com/xiaojian1987/p/8342104.html

1.安装QT

QT官网下载:http://download.qt.io/archive/qt/

我安装的QT 版本是:qt-opensource-windows-x86-msvc2015_64-5.8.0.exe

2.安装VS2015 与QT 

参考链接: https://blog.csdn.net/lebusini/article/details/79901628

3.下载并安装以下工具软件

下载并安装以下软件包:

Tool Website
CMake https://cmake.org/files/v3.7/cmake-3.7.2-win64-x64.msi
GNU flex, GNU bison and 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发行版提供了准备好的软件包,而且还为每个主机的夜间构建提供了可用的软件包,同时也提供了构建它的大部分依赖关系。如果用户要要编译32位的QGIS请用32位的OSGeo4w下载,如果用户要要编译64位的QGIS请用64位的OSGeo4w。32位的在下载时会下载32位的依赖库,64位的在下载时会下载64位的依赖库。

对于QGIS构建,您需要从cygwin安装以下软件包:

  • bison
  • flex
  • git

注:

  • flex和 bison可以从cygwin下载,但是要注意32位还是64位,32位的在下载时会下载32位的,64位的在下载时会下载64位的。安装地址不要带空格和中文。也可以从我提供的以下的链接直接下载解压:

  • git可以不用下载,这个主要是用来下载QGIS源码包的,下载QGIS源码包我们要以从官网上下载。


qgis下载地址:https://qgis.org/downloads/

和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
  • qjson-dev
  • qjson-libs

这也可以选择上述软件包所依赖的软件包。要注意的是,上述所有的软件包或依赖不能有空格或中文。


4. 使用CMake设置并构建Visual Studio项目

要启动具有VC ++和OSGeo4W变量的环境的命令提示符,将创建以下批处理文件(假定上述包安装在默认位置):

set VS140COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
set OSGEO4W_ROOT=C:\OSGeo4W64
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%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
path %PATH%;C:\Program Files\CMake\bin;C:\cygwin64\bin
@set GRASS_PREFIX=C:/OSGeo4W64/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路径多个;之间不能有空格。

在某个地方创建一个“build”目录。这将是生成所有构建输出的位置。

找到CMake的安装目录,以管理员的方式运行"cmake-gui.exe",然后设置qgis源码包的目录和项目的构建目录:


点击“Configure ”启动配置并选择VisualStudio 14 2015/VisualStudio 14 2015 X64并保留本机编译器,然后单击完成。

Configure ”过程中,可能会出现配置不正常的项目,如果某个依赖项没有链接到,请手动选择链接目录。我出现的找不到的问题:

1.记得错误后勾选ENABLE_QT5选项,否则将会查找qt4

2.PYRCC_PROGRAM需手动查找,我的对应路径:C:/OSGeo4W64/apps/Python36/Scripts/pyrcc5.bat

3.SPATIALINDEX_LIBRARY需手动查找,我的对应路径:C:/OSGeo4W64/lib/spatialindex-64.lib

4.取消勾选WITH_QWTPOLAR选项,不需要










配置到“Configuring done",然后点击“Generate" 生成VS2015的项目解决方案,直到“Generating done”,然后在项目目录中打开qgis-x.y.z.sln文件。
在使用ALL_BUILD目标构建QGIS之前,将Debug中的解决方案配置更改为RelWithDebInfo(发布调试信息)或Release(否则需要不包括的调试库)。

5. 编译QGIS

1、将debug模式改为ReWithdebInfo

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

3、优先编译qgis_core,此工程编译通过后,再编译其他的;

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


6. 编译问题

1.找不到 <netinet/in.h>,注释掉即可


2. error C2001: newline in constant (主要是页面不支持("′")("″")的符号)

解决方法:打开出现warning的文件,Ctrl+A全选,然后在文件菜单:file->advanced save options ,在弹出的选项中选择新的编码方式为:UNICODE codepage 1200 ,点击确定,问题就解决了。

3.编译过程中proj.lib相关报错,将名称换成proj_i.lib即可;

4.error LNK2019 unresolved external symbol WinMain referenced in function xx  qgis

解决方法:将qtmain.lib添加到附加依赖库中,如图所示:


5.此时会出现更种丢失dll的问题

解决方法:将两个路径加入到环境变量path中


6.此时打开exe文件仍然崩溃

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



4、再次启动,成功。

打开项目中的测试数据,效果如下:


猜你喜欢

转载自blog.csdn.net/lebusini/article/details/79911824