QGIS编译
[
QGIS编译
源码下载
QGIS源码下载:https://github.com/qgis/QGIS/releases
本文源码版本3.26.0环境下载
Cygwin64
- 下载Cygwin64安装包,setup-x86_64.exe。
- 安装Cygwin64,并安装Flex、Bison。
Flex >= 2.5.6
Bison >= 2.4
OSGeo4W
- 下载OSGeo4W安装包,osgeo4w-setup.exe。
- 安装OSGeo4W,并安装QGIS依赖环境qgis-dev-deps或qgis-ltr-dev-deps,本文安装的版本。
CMAKE
- 下载安装CMake。https://cmake.org/download/
本文Cmake3.22.3
Visual Studio 2017 和 Visual Studio 2019
下载安装Visual Studio 2017 和Visual Studio 2019社区版
https://visualstudio.microsoft.com/zh-hans/downloads/
安装C++桌面开发组件。除默认的以外,还需安装Windows 10 SDK(10.0.14393.0) ,会用到SetupAPI.Lib。开始编译
CMAKE
- 运行cmkae.bat
@echo off set VS150COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\ call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib set OSGEO4W_ROOT=C:\OSGeo4W call "%OSGEO4W_ROOT%\bin\o4w_env.bat" SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39 SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts set PYTHON_EXECUTABLE=%PYTHONHOME%/python3.exe PATH %PYTHONPATH%;%PATH% path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH% set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5 set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/include set O4W_QT_DOC=%OSGEO4W_ROOT:\=/%/apps/Qt5/doc set O4W_ROOT=%OSGEO4W_ROOT:\=/% set LIB_DIR=%O4W_ROOT% path %path%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\c1.dll path %PATH%;C:\OSGeo4W\apps\Qt5\bin;C:\cygwin64\bin path %path%;C:\OSGeo4W\apps\gdal-dev\bin @set GRASS_PREFIX=C:\OSGeo4W\apps\grass\grass82 @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 call "C:\Program Files\CMake\bin\cmake-gui.exe"
配置cmake
运行代码
- qgis_core
- qgis_gui
- qgis_app
- qgis
- qgis_allbuild
- 将qgis项目设置为启动项,调试,运行成功
- 运行cmkae.bat
改化界面和图标
CMAKE
- 更改图标
- 更改标题
更改标题部分的代码
- 更改图标
可能遇到的问题(以下问题以在编译包的环境中全部解决了,零报错)
1不能加载sip模块,解决方法,将此处的qgis文件夹替换掉
2cmd.exe已退出,解决方法,编译.ui文件
命令行设置为"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" 说明为 Uic%27ing %(Identity)... 输出为.\GeneratedFiles\ui_%(Filename).h 附加依赖性$(QTDIR)\bin\uic.exe 链接对象选择 是
然后编译当前选择的Ui文件,成功后编译整个项目
3 链接错误或者缺少有关附加库问题
通常表现为——无法解析的外部符号;找不到、打不开.lib文件等 这与个人的主机环境有关,可以在“项目”->“属性”->“连接器”->“输入”附加依赖项中修改。 Lib问题,检查附加依赖项 可以在“项目”->“属性”->“连接器”->“输入”附加依赖项中查看修改; 对于Release或者RelWithDebInfo版本,Lib路径基本如下图列举 对于Debug版本,部分Lib库名后有d标识 如下图的Qt5Cored即为Debug版本 (Debug版本与Release(RelWithDebInfo)版本的Lib名称不同,但路径一致。在工程修改版本环境时会自动更新链接,更改库名。无需手动更改。)
4 缺少可执行文件或者环境路径问题
Dll问题,检查可执行文件目录,即检查环境路径 可以在“项目”->“属性”->“VC++目录”->“可执行文件目录”中编辑查看 主要检查有无以下路径: D:\QGIS\OSGeo4W64\apps\qt5\bin D:\QGIS\OSGeo4W64\apps\Python37 D:\QGIS\OSGeo4W64\apps\Python37\Scripts D:\QGIS\OSGeo4W64\bin D:\Program Files\CMake\bin D:\QGIS\cygwin64\bin C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\system32\WBem
5 C1083 keychain.h无法打开包含文件
检查qgis_core中链接器,输入中添加附加包含目录Qt5Keychain.lib
6 MSVCRT.lib(exe_winmain.obj) : error LNK2019: 无法解析的外部符号 WinMain
新建项目是控制台应用程序,而程序通过的是WinMian(及windows入口函数) 可以在“qgis_core项目”->“属性”->“连接器”->“输入”附加依赖项中修改添加 D:\QGIS\OSGeo4W64\apps\Qt5\lib\qtmain.lib
7 在python中执行from PyQt5.QtCore import * 提示引入模块找不到
from qgis._core import * ImportError: DLL load failed: 找不到指定的程序。 【解决方案】:使用镜像安装sip,pyqt5,pyqt5-tools pip install pyqt5 pyqt5-tools -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
8 error MSB6006: “rc.exe”已退出,代码为 5
在C盘下直接搜索该应用,将其路径配置到项目中即可
9 严重性 代码 说明 项目 文件 行 禁止显示状态
错误 MSB8066 “C:\OSGeo4W\QGIS\build\python\core\core.sip”的自定义生成已退出,代码为 1。 python_module_qgis__core C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets 241
解决方法