admin管理员组

文章数量:1539849

2024年4月28日发(作者:)

1. 安装VS2015 ×86以及5以上版本的QT,并将QT配置到VS上;安装CMake

(有需要的再额外安装Python37;安装doxyden;)

除VS默认加入环境路径,检查QT和CMake的bin文件已经加入环境路径

你可以右击“我的电脑”->“属性”->“高级系统设置”->“环境变量”->在系统

变量中找到PATH,编辑查看

(如果此时不添加,也可在生成工程时一起配置环境)

2. 安装Cygwin依赖库

在这之前,你可以新建一个文件夹QGIS,将下载的需要的文件都放到下面,便于整

理,最后它将是这样。

2.1 运行Cygwin ,按以下步骤继续

随便选择一个网址,一般默认第一个;无需点击Add,直接下一步。

所需库均搜索完毕,点击下一步等候下载安装即可。

2.2 在这个过程中,注意以下几点

(1)View选择Category(若不是,点击View可更改)

(2)Search输入要下载的内容,本工具只用下载flex和bison

(3)选择Devel,展开,如果当前未下载则显示的是"Skip",点击会变成具体的版本,

然后点击下一步即可下载(由于我这边都下过了,所以显示的是版本号和keep)。

没有下载的应该类似这样

(4)Search一个库之后,点击"Skip"使其出现版本编号后,清除search框的内容,

继续search下一个。全部搜索点击完成后,再点击下一步,所有搜索项将会一起下载。

(5)上述路径不要有中文或空格

3. 安装osgeo4W依赖库

(文件较多较大,建议在网速流畅的条件下进行)

3.1 运行

如下

按个人需要修改路径

等待加载

3.2 依赖库的搜索项

(1)操作同Cygwin的步骤类似,略去不提

(2)你需要依次search以下内容:

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

(3)遵从“宁可多下,绝不少下”的原则

(4)仅仅下载Library的内容

用CMake生成工程

1. 配置环境

新建一个txt文件,命名path(具体什么命名无所谓)

将以下内容拷贝到里面。

@echo off

set VS140COMNTOOLS = D:Program Files (x86)Microsoft Visual Studio

14.0Common7Tools

call "D:Program Files (x86)Microsoft Visual Studio " x64

set INCLUDE=%INCLUDE%;C:Program Files (x86)Microsoft

SDKsWindowsv7.1AInclude

set LIB=%LIB%;C:Program Files (x86)Microsoft SDKsWindowsv7.1ALib

set OSGEO4W_ROOT=D:QGISOSGeo4W64

call "%OSGEO4W_ROOT%bino4w_"

call "%OSGEO4W_ROOT%binpy3_"

call "%OSGEO4W_ROOT%binqt5_"

set O4W_ROOT=%OSGEO4W_ROOT:=/%

set LIB_DIR=%O4W_ROOT%

path %path%;D:Program Files (x86)Microsoft Visual Studio 14.0VCbin

path %PATH%;D:Program FilesCMakebin;D:QGIScygwin64bin

@set GRASS_PREFIX=D:/QGIS/OSGeo4W64/apps/grass/grass-7.4.1

@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%include

@set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib

set LIB=%LIB%;%OSGEO4W_ROOT%appsQt5lib;%OSGEO4W_ROOT%lib

set

INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%appsQt5include;%OSGEO4W_RO

OT%include

@cmd

@echo off

set VS140COMNTOOLS = D:Program Files (x86)Microsoft Visual Studio

14.0Common7Tools

call "D:Program Files (x86)Microsoft Visual Studio " x64

set INCLUDE=%INCLUDE%;C:Program Files (x86)Microsoft

SDKsWindowsv7.1AInclude

set LIB=%LIB%;C:Program Files (x86)Microsoft SDKsWindowsv7.1ALib

set OSGEO4W_ROOT=D:QGISOSGeo4W64

call "%OSGEO4W_ROOT%bino4w_"

call "%OSGEO4W_ROOT%binpy3_"

call "%OSGEO4W_ROOT%binqt5_"

set O4W_ROOT=%OSGEO4W_ROOT:=/%

set LIB_DIR=%O4W_ROOT%

path %path%;D:Program Files (x86)Microsoft Visual Studio 14.0VCbin

path %PATH%;D:Program FilesCMakebin;D:QGIScygwin64bin

@set GRASS_PREFIX=D:/QGIS/OSGeo4W64/apps/grass/grass-7.4.1

@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%include

@set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib

set LIB=%LIB%;%OSGEO4W_ROOT%appsQt5lib;%OSGEO4W_ROOT%lib

set

INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%appsQt5include;%OSGEO4W_RO

OT%include

@cmd

注意说明:上面的路径以及grass的版本要根据自己的实际情况,做适当地改变

(1)VS140COMNTOOLS表示VS15

(若是VS2017则用语句VS150COMNTOOLS表示)

(2)Include表示头文件,这里加了Win10系统的sdk;Lib表示编译的动态库

(3)Path表示环境变量(刚才在前面没有设置的路径,现在也可以在这里添加)

(4)特别注意:GRASS_PREFIX的路径地址必须是“/”,Path路径多个;之间不能有

空格

保存txt的内容,将文件后缀名改为.bat

打开cmd命令窗口进入“”所在路径;(或在“”所在处shift加右

键可直接看到打开命令窗口的选项)

输入以下命令:

(在win10新版本中语法规则改变,输入:/.)

出现类似“Microsoft Windows 版本 10.0.17134.345 2018 Microsoft

Corporation。保留所有权利。”字样,表执行成功

接着输入cmake-gui

将会打开CMake编辑页

2. 利用CMake构建项目

在上方文本框中分别输入QGIS源码路径;构建的VS工程的输出路径

点击下方“Configure”,将弹出VS版本选择(若为VS2017选择Visual Studio 15

2017 Win32)

随后,CMake将自动索引有关链接库,生成链接,对没有搜索到的库会报错显示没有

找到路径。

(建议第一遍搜索后按我的配置手动增加路径)

增加步骤:

选择Add Entry

在这里,建议将QT与Python的有关路径全部改为OSGeo4W64/apps下的QT5和

Python3文件夹下的路径。

因为CMake搜索机制是从硬盘文件夹逐步深入;所以主目录优先寻找到此主机安装

上的QT与Python目录。

如果您的版本刚好是QT5.11.2与Python3+,可能不会影响结果,但如果版本有差异

很可能造成后期编译出现链接错误。

而OSGeo4W64是QGIS方提供的最新库,将保证链接不出现问题(若后期有意更换

最新版本的QGIS源码,仅在OSGeo4W64重新下载有关库到原保存文件夹下,更新生成

VS工程即可)

以下附上我具体的路径配置

为避免其他情况,请保证以下图中路径均添加入其中。

勾选DISABLE_DEPRECATED表示禁用不推荐的功能为下一代做准备。建议勾选,不

勾也可。

ENABLE_QT5表示用QT5编译

ENABLE_TESTS表示生成测试文件,不勾选也可

(希望用Python编辑QGIS源码,则需要勾选ENABLE_PYTHON3)

WITH是对QGIS功能的插件添加项,一般与你的需求有关,如不需要在Python等

其他软件下编辑,仅仅保留几项即可。若有其他需求,可再额外设置其依赖的第三方库

为避免其他问题,请保证以下WITH内容被勾选:

保证可以生成文件,需要勾选——

WITH_DESKTOP;WITH_INTERNAL_QEXTSERIALPORT;

WITH_INTERNAL_QWTPOLAR

可选择性勾选基本的使用功能——

WITH_GUI;WITH_POSTGRESQL;WITH_STAGED_PLUGINS

当“Configure”直到下方信息栏显示Configuring done;

点击“Generate”显示Generate done;

此时“Open Object”按钮变亮点击它,即可进入工程项目;

(下一次需要打开工程,可在新建项目文件夹下,寻找.sln后缀的工程文件,打开即

可)

在VS下编译

工程加载进入后,先将Debug格式改为Release或者RelWithDebInfo(在这两种

版本下,编译不包含调试信息,容量上大大减小,运行速度大幅度提高;对于较大工程比

较适用;在Rel版本下调试正确后换为Deg版本依旧正确,无须担心)

此处以RelWithDebInfo做例

1. 修改不识别的符号

先在资源管理器中找到qgis项目,右击该项目,选择“设为启动项目”

接着,你可以先试着第一次生成解决方案,以排除所有页面不识别的错误

你应会遇到大量报错,请等待生成完毕。

在错误中会出现例如

“错误 C2143 语法错误: 缺少“)”(在“;”的前面) ”

“错误 C2001 常量中有换行符 ”

……

这些错误的原因是因为页面不支持("′")("″")的符号

在错误列表关闭错误,仅查看警告,并点击“说明”让其聚类。大体上将出现会三种

警告类型。

对于以下这两种,我们忽视掉——

“警告 C4718

“QMapNode::doDestroySubTree”: 递归调

用无副作用,正在删除 ”

“警告 C4702 无法访问的代码 ”

而对于——

“警告 C4819 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为

Unicode 格式以防止数据丢失 ”

我们点双击其文件一栏的文件名,进入对应的.cpp或.h文件

Ctrl+A 全选文件内容,点击上方“文件”,找到“高级保存设置”

将其从无签名改为带签名

修改后——

修改所有出现此类警告的.cpp和.h文件,再次生成“qgis”项目,大部分报错将会消

失。(也有可能直接编译通过)

2. 可能报错的其他问题

2.1与有关的未初始化的定义

解决方法:

找到例如此的警告信息

LNK4099 未找到 PDB“”(使用“(qtmain_)正在链

接对象,如同没有调试信息一样

得到该警告来源的项目名,如“qgiscrashhandle”

右击“qgiscrashhandle项目”->“属性”->“连接器”->“输入”附加依赖项中修

改添加

D:

2.2 qgis_gui项目中出现未定义的标识符 "QWebElement"

解决方法:

“qgis_gui项目”->“属性”->“C/C++”->“常规”附加包含目录中修改添加

D:QGISOSGeo4W64appsQt5includeQtWebKit

注释掉报错函数关于QWebElemen类的内容,并在文件开头注释

掉——

//#if WITH_QTWEBKIT

//#endif

(因为原代码中WITH_QTWEBKIT未定义,头文件 不可被识别;又因

WITH_QTWEBKIT未定义,QWebElemen类中部分函数无法被调用,故也注释掉)

2.3 qgis_gui项目中出现CORE_EXPORT显式实例化声明无效

解决方法:

对于报错的位置——qgsoptionalexpression.h文件中,在template后添加class

重新生成解决方案。

如果完整的下载了链接库并正确引入路径,此时,不会再遇到其他问题。

我们可以在输出路径下发现生成的文件

(路径:D:QGISqgis-3.2.2-buildoutputbinRelWithDebInfo)

2.4 可能会报错未定义标识符,一般为QAction或QButonGroup的头文件未添加,

在当前文件下添加相应头文件即可。

3. 其他可能的问题(来源于网络统计)

如果出现问题,优先选择从gis_core项目、qgis_analysis项目、qgis_gui项目依次

调试(其他项目均依赖于他们)

此时仍然有可能出现:

3.1 找不到 ,注释掉即可

3.2 error MSB6006: “”已退出,代码为 5

在C盘下直接搜索该应用,将其路径配置到项目中即可。

3.3 (exe_) : error LNK2019: 无法解析的外部符号

WinMain

这是因为——

新建项目是控制台应用程序,而程序通过的是WinMian(及windows入口函数)

可以在“qgis_core项目”->“属性”->“连接器”->“输入”附加依赖项中修改添

D:

重新生成即可。

3.4 链接错误或者缺少有关附加库问题

通常表现为——无法解析的外部符号;找不到、打不开.lib文件等

这与个人的主机环境有关,可以在“项目”->“属性”->“连接器”->“输入”附加

依赖项中修改。

附上我的部分属性情况

Lib问题,检查附加依赖项

可以在“项目”->“属性”->“连接器”->“输入”附加依赖项中查看修改;

对于Release或者RelWithDebInfo版本,Lib路径基本如下图列举

对于Debug版本,部分Lib库名后有d标识

如下图的Qt5Cored即为Debug版本

(Debug版本与Release(RelWithDebInfo)版本的Lib名称不同,但路径一致。

在工程修改版本环境时会自动更新链接,更改库名。无需手动更改。)

附加依赖项——

3.5 缺少可执行文件或者环境路径问题

Dll问题,检查可执行文件目录,即检查环境路径

可以在“项目”->“属性”->“VC++目录”->“可执行文件目录”中编辑查看

主要检查有无以下路径:

D:QGISOSGeo4W64appsqt5bin

D:QGISOSGeo4W64appsPython37

D:QGISOSGeo4W64appsPython37Scripts

D:QGISOSGeo4W64bin

D:Program FilesCMakebin

D:QGIScygwin64bin

C:WINDOWSsystem32

C:WINDOWS

C:WINDOWSsystem32WBem

运行成果

配置运行环境

编译好的会在目录

D:QGISqgis-3.2.2-buildoutputbinRelWithDebInfo下

但打开时会出现报错

此时,把OSGeo4W64appsQt5bin和OSGeo4W64bin下的dll文件全部拷贝

到exe文件同目录下即可

同时,把OSGeo4W64appsQt5plugins文件下的platforms文件夹也拷贝到exe

文件同目录下

当程序运行时,找不到正确支持图标格式(svg)的库文件。这里需要把

OSGeo4W64appsQt5plugins文件下的imageformats文件夹也拷贝到exe文件同目

录下

当运行时还可能找不到数据库,需要把QGISappsQt5plugins文件夹下的

sqldrivers文件夹也拷贝到exe文件同目录下

再次打开运行

如图所示——

语言汉化

点击Settings->Options,选择国旗和语言(一定要选国旗),设置完成以后,重新启

动即可。

---------------------

作者:GeXiao1205

来源:CSDN

原文:/qq_39506222/article/details/83298543

版权声明:本文为博主原创文章,转载请附上博文链接!

本文标签: 路径文件版本项目问题