WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装)

文章描述:-2022年3月28日发(作者:安萨里)WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装) 时间:2014年11月22日 1. 准备工作 1.1 下载QGIS源码 Qgis源码可在http:上下载,当前的最新版本是Qgis2.6.0版本。 1.2 下在Visual Studio 2008 Pro 下载离线版 1.3 下载Qgis编译所需的依赖工具 1.3.1 CMake

-

WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装)2022年3月28日发(作者:安萨里)


WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装)
时间:2014年11月22日
1. 准备工作
1.1 下载QGIS源码
Qgis源码可在
http:
上下载,当前的最新版本是Qgis2.6.0版本。
1.2 下在Visual Studio 2008 Pro
下载离线版
1.3 下载Qgis编译所需的依赖工具
1.3.1 CMake
Qgis跟大多数开源工程一样,也是采用Cmake编译的。CMake的版本要求
CMake >= 2.8.0,本人采用CMake2.8.12。
下载地址:
http:filesv2.8

1.3.2 flex&bison
flex和bison目前提供的window安装包版本太老,截至2013年Windows 安装包flex
的版本是2.5.4a(
http:downlinks
),而最新的flex
版本是2.5.37;Windows安装包bison的版本是2.4.1

http:downlinks
),而现在最新的bison版本是3.0。
对于Qgis2.6.0不能采用目前提供的flex和bison的windows 安装包(Qgis1.8.0之前的版本
是可以的,编译的时候会出现问题,后面细说)。
既然flex和bison的windows 安装包不能用,那该怎么办呢?有两种解决思路:
a) 下载flex2.5.37和bison 3.0的源码,通过Cygwin或Mingw安装;(有点麻烦,本人
木有试~)
b) 从sourceforge上下载最新版的Win flex-bison安装包
win_flex_,本人下载
的版本包含win_flex2.5.37和win_bison3.0,不需要安装,直接将安装包解压到指定目录,确保目
录中没有空格,本人的目录为C:GnuWin32win_flex_bison。(注意:最新的
Win flex-bison在
vs2008中还不能直接使用,在vs2010中是可以直接使用的,由于本人安装了VS2008,
所以还得进行一系列规则配置,后面细说



1.4 下载编译所依赖的库
第三方库是通过OSGEO4W提供的,首先下载OSGEO4W安装包
http:osgeo4w (32bit)


or http:osgeo4wosgeo4w-setup-x86_ (64bit)其次,
下载
OSGEO4W中的依赖库,














expat
fcgi
gdal
grass
gsl-devel
iconv
pyqt4
qt4-devel
qwt5-devel-qt4
sip
spatialite
libspatialindex-devel
python-qscintilla
由于是离线下载,在离线主机上,继续安装OSGeo4W安装包,选择高级安装,选择从
本地安装,选择刚才下载的依赖库,继续安装,则编译所依赖的库文件安装完成。

2. 环境变量设置
新建一个文件,输入以下
@echo off
set VS90COMTOOLS=%PROGRAMFILES%Microsoft Visual Studio
9.0Common7Tools
call

set ICLUDE=%ICLUDE%;%PROGRAMFILES%Microsoft
SDKsWindowsv7.1include
set LIB=%LIB%;%PROGRAMFILES%Microsoft SDKsWindowsv7.1lib

set OSGEO4W_ROOT=C:OSGeo4W
call
path %PATH%;%PROGRAMFILES%CMake
2.8bin;%PROGRAMFILES%GnuWin32bin

@set GRASS_PREFIX=c:OSGeo4Wappsgrassgrass-6.4.4
@set ICLUDE=%ICLUDE%;%OSGEO4W_ROOT%include
@set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib

@cmd


保存,双击运行, 如果控制台出现,

说明你的vs的环境变量设置正确,否则请检查以上步骤。
3. CMake配置
3.1从cmd中运行,重点是需要从cmd中运行,这样才可以获得通过
设置的环境变量的值。
3.2 在Where is the source code中输入源码的位置,比如我将源码解压在D:QGIS下,
在Where to build the binaries中输入生成的工程目录,比如我设置在D:QGISbuild下
3.3 点击Configure时选择自己的vs环境,我选择了vs2008
3.4 遇到不到Flex和Bison路径时,需要把刚才下载的Flex和Bison的目录设置后再
继续点击Configuration;
3.5遇到不到geos、sqlite3等包含头文件目录时,统一设置为D:OSGeo4Winclude,
不到库目录时统一设置为D:OSGeo4Wlib,
3.6设置SETUPAPI_LIBRARY为sdk中的,如果没有安装SDK,则需安装
相应版本的SDK。
具体的设置项,如图所示:

设置完成后点击Configure,选择Visual Studio 9(2008) 出现configure done 之后,点击
generate,出现generate done之后,就可以进行编译了。
注意:_ISTALL_PREFIX的值默认为C:Program Filesqgis2.6.0,表示编译完成
的qgis2.6.0的安装目录,该目录可以修改。
2.注意SPATIALITE_ICLUDE_DIR的目录得设为C:OSGEO4Winclude,而不能设
为C:OSGEO4Wincludespatialite,否则编译的时候可能会出现error C3861:”spatialite_init”:


不到标识符。

4. 编译前配置VS2008+win flex_bison
由于win flex_bison中自带的规则只使用于VS2010,因此在VS2008中使用win
Flex_bison需要进行相关配置。
VS2010 + win flex_bison,参考《Visual Studio custom build rules- These steps help you
setup custom build rules for Visual Studio 2010 and up.》
VS2008 + win flex_bison,参考《Using flex and bison in MSVC++》
下面详细介绍一下VS2008 + win flex_bison的配置过程吧,主要参考《Using flex and
bison in MSVC++》一文提到的方法。

4.1在vs2008项目中添加自定义生成规则
用vs2008打开F:xffangQGISbuild,右键点击项目ALL-BUILD->自定义生
成规则,进入VC++自定义生成规则文件界面;继续选择新建规则文件,设置:
规则名称:Flex and Bison Tools
文件名:
规则存放目录:D:flex_bisonRule

点击确定,完成规则文件创建,之后在vs2008中编译的所有flex_bison相关项目都用
此规则。D:flex_bisonRule目录下生成的规则文件如图:

在VC++自定义生成规则文件界面;紧接着选择修改规则文件,



点击添加生成规则按键,添加两个生成规则,分别为Bison和Flex,主要Bison规则一定
要在flex之前。
Bison规则设置:

Flex规则设置:

定制好的规则文件设置如下:



5. 编译-生成代码
更换解决方案配置Debug为RelWithDebInfo; 项目右键-生成,开始进行编译,由于整
个编译过程十分漫长,因此只编译Qgis依赖的项目。
ALL-BUILD右键,项目依赖项,勾选以下几个依赖项,开始编译即可。
名称
qgis
说明
QGIS可执行程序
qgis_analysis
依赖项
qgis_core
qgis_gui
ui
gdalprovider
Ogrprovider
依赖项,QGIS核心库
依赖项,QGIS界面库
QGIS所有的界面
读取栅格数据驱动
读取矢量数据驱动
6. 安装
将qgis项目设为启动项目,点击ISTALL安装,可能会出现缺少的错误,
其原因是环境变量中没有添加所在的目录C:OSGeo4Wbin;或者直接将
拷贝到vs目录下,继续ISTALL安装,安装完成之后,点击安装目录下的,默认安
装目录为C:Program Filesqgis2.6.0bin,出现QGIS界面提示,说明安装成功。




附:注意问题
(1) 环境变量设置
除了运行自动设置环境变量外,一定要把win flex_bison的解压目录、OSGeo4W
安in目录、Cmake安in目录、目录添加到环境变量Path中;

解决方法:环境变量最好全部都提前设好,避免编译出现其他错误。

(2) win flex_bison一定要解压到没有空格的目录下,并且在CMake中要配置正确路径,
否则,可能出现C:GnuWin32win_flex_bisonwin_: m4 :o such file or directory
或者Project: error PRJ2019:某个工具从以下位置返回了错误代码:“Generating
”等类似错误,
解决方法:
a) C:GnuWin32win_flex_bisonwin_: m4 :o such file or directory,问题只能是重
新解压win flex_bison到无空格的路径
b) CMake中Bison路径设置不正确可能会导致生成问题,

打开可以看到,编译出错位置的命令,

除了正确配置CMake路径之外,还可以通过手动编译来解决:
在命令行进入到win flex_bison解压目录,运行:
win_ -oF:QGISbuildsrccore –d –v –t
F:QGISSourceqgis-2.6.0srccore
则可生成。


c) 也有可能由于CMake中Flex路径设置不正确导致flex_生成问题,

本应该为:C:GnuWin32win_flex_bisonwin_ (本人为复现错误,估计修改的)

打开可以看到

同样,除了配置CMake路径外,可手动运行:
win_ -oF:QGISbuildsrccoreflex_
F:QGISSourceqgis-2.6.0src core
可生成flex_。

(3) 将unistd.h头文件添加到VS2008安装目录下的include中去;C:Program FilesMicrosoft
Visual Studio 9.0VCinclude
作用: 如果没有添加,生成的qgpressionparser为.c文件,而不是.cpp

若添加unistd.h,则生成:

unistd.件可以从旧版本GU安装目录Include下获取。

(4) 如果安装了低版本的flex和bison,可能出现问题:
Line22: “..srccore” Unrecognized %option
或者 Line24: “..srccore” Unrecognized %bison-bridge
因此只能安装新版的win flex-bison

(5) 注意,CMake中的SPATIALITE_ICLUDE_DIR的目录得设为C:OSGEO4Winclude,
而不能设为C:OSGEO4Wincludespatialite,否则编译的时候可能会出现error
C3861:”spatialite_init”:不到标识符。


可参考的文件:
1. Building QGIS from source - step by step 文件
2. Using flex and bison in MSVC++
3. 《Visual Studio custom build rules- These steps help you setup custom build rules for Visual
Studio 2010 and up.》


其他:
http:�����˶���blogitem
http:Bug?id=9634
http:ajeyonearchive20110512
http:sblog_
http:gisstararticledetails4249225
http:wsh6759articledetails6894073
http:ryanzllarticledetails6217142


后记:搞了三四天终于搞定了,一定要认真细心环境变量的设置和CMake目录的设置会减
少很多麻烦,其次,安装最新版的win flex_bison, 其他问题也都会迎刃而解的。


WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装)
时间:2014年11月22日
1. 准备工作
1.1 下载QGIS源码
Qgis源码可在
http:
上下载,当前的最新版本是Qgis2.6.0版本。
1.2 下在Visual Studio 2008 Pro
下载离线版
1.3 下载Qgis编译所需的依赖工具
1.3.1 CMake
Qgis跟大多数开源工程一样,也是采用Cmake编译的。CMake的版本要求
CMake >= 2.8.0,本人采用CMake2.8.12。
下载地址:
http:filesv2.8

1.3.2 flex&bison
flex和bison目前提供的window安装包版本太老,截至2013年Windows 安装包flex
的版本是2.5.4a(
http:downlinks
),而最新的flex
版本是2.5.37;Windows安装包bison的版本是2.4.1

http:downlinks
),而现在最新的bison版本是3.0。
对于Qgis2.6.0不能采用目前提供的flex和bison的windows 安装包(Qgis1.8.0之前的版本
是可以的,编译的时候会出现问题,后面细说)。
既然flex和bison的windows 安装包不能用,那该怎么办呢?有两种解决思路:
a) 下载flex2.5.37和bison 3.0的源码,通过Cygwin或Mingw安装;(有点麻烦,本人
木有试~)
b) 从sourceforge上下载最新版的Win flex-bison安装包
win_flex_,本人下载
的版本包含win_flex2.5.37和win_bison3.0,不需要安装,直接将安装包解压到指定目录,确保目
录中没有空格,本人的目录为C:GnuWin32win_flex_bison。(注意:最新的
Win flex-bison在
vs2008中还不能直接使用,在vs2010中是可以直接使用的,由于本人安装了VS2008,
所以还得进行一系列规则配置,后面细说



1.4 下载编译所依赖的库
第三方库是通过OSGEO4W提供的,首先下载OSGEO4W安装包
http:osgeo4w (32bit)


or http:osgeo4wosgeo4w-setup-x86_ (64bit)其次,
下载
OSGEO4W中的依赖库,














expat
fcgi
gdal
grass
gsl-devel
iconv
pyqt4
qt4-devel
qwt5-devel-qt4
sip
spatialite
libspatialindex-devel
python-qscintilla
由于是离线下载,在离线主机上,继续安装OSGeo4W安装包,选择高级安装,选择从
本地安装,选择刚才下载的依赖库,继续安装,则编译所依赖的库文件安装完成。

2. 环境变量设置
新建一个文件,输入以下
@echo off
set VS90COMTOOLS=%PROGRAMFILES%Microsoft Visual Studio
9.0Common7Tools
call

set ICLUDE=%ICLUDE%;%PROGRAMFILES%Microsoft
SDKsWindowsv7.1include
set LIB=%LIB%;%PROGRAMFILES%Microsoft SDKsWindowsv7.1lib

set OSGEO4W_ROOT=C:OSGeo4W
call
path %PATH%;%PROGRAMFILES%CMake
2.8bin;%PROGRAMFILES%GnuWin32bin

@set GRASS_PREFIX=c:OSGeo4Wappsgrassgrass-6.4.4
@set ICLUDE=%ICLUDE%;%OSGEO4W_ROOT%include
@set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib

@cmd


保存,双击运行, 如果控制台出现,

说明你的vs的环境变量设置正确,否则请检查以上步骤。
3. CMake配置
3.1从cmd中运行,重点是需要从cmd中运行,这样才可以获得通过
设置的环境变量的值。
3.2 在Where is the source code中输入源码的位置,比如我将源码解压在D:QGIS下,
在Where to build the binaries中输入生成的工程目录,比如我设置在D:QGISbuild下
3.3 点击Configure时选择自己的vs环境,我选择了vs2008
3.4 遇到不到Flex和Bison路径时,需要把刚才下载的Flex和Bison的目录设置后再
继续点击Configuration;
3.5遇到不到geos、sqlite3等包含头文件目录时,统一设置为D:OSGeo4Winclude,
不到库目录时统一设置为D:OSGeo4Wlib,
3.6设置SETUPAPI_LIBRARY为sdk中的,如果没有安装SDK,则需安装
相应版本的SDK。
具体的设置项,如图所示:

设置完成后点击Configure,选择Visual Studio 9(2008) 出现configure done 之后,点击
generate,出现generate done之后,就可以进行编译了。
注意:_ISTALL_PREFIX的值默认为C:Program Filesqgis2.6.0,表示编译完成
的qgis2.6.0的安装目录,该目录可以修改。
2.注意SPATIALITE_ICLUDE_DIR的目录得设为C:OSGEO4Winclude,而不能设
为C:OSGEO4Wincludespatialite,否则编译的时候可能会出现error C3861:”spatialite_init”:


不到标识符。

4. 编译前配置VS2008+win flex_bison
由于win flex_bison中自带的规则只使用于VS2010,因此在VS2008中使用win
Flex_bison需要进行相关配置。
VS2010 + win flex_bison,参考《Visual Studio custom build rules- These steps help you
setup custom build rules for Visual Studio 2010 and up.》
VS2008 + win flex_bison,参考《Using flex and bison in MSVC++》
下面详细介绍一下VS2008 + win flex_bison的配置过程吧,主要参考《Using flex and
bison in MSVC++》一文提到的方法。

4.1在vs2008项目中添加自定义生成规则
用vs2008打开F:xffangQGISbuild,右键点击项目ALL-BUILD->自定义生
成规则,进入VC++自定义生成规则文件界面;继续选择新建规则文件,设置:
规则名称:Flex and Bison Tools
文件名:
规则存放目录:D:flex_bisonRule

点击确定,完成规则文件创建,之后在vs2008中编译的所有flex_bison相关项目都用
此规则。D:flex_bisonRule目录下生成的规则文件如图:

在VC++自定义生成规则文件界面;紧接着选择修改规则文件,



点击添加生成规则按键,添加两个生成规则,分别为Bison和Flex,主要Bison规则一定
要在flex之前。
Bison规则设置:

Flex规则设置:

定制好的规则文件设置如下:



5. 编译-生成代码
更换解决方案配置Debug为RelWithDebInfo; 项目右键-生成,开始进行编译,由于整
个编译过程十分漫长,因此只编译Qgis依赖的项目。
ALL-BUILD右键,项目依赖项,勾选以下几个依赖项,开始编译即可。
名称
qgis
说明
QGIS可执行程序
qgis_analysis
依赖项
qgis_core
qgis_gui
ui
gdalprovider
Ogrprovider
依赖项,QGIS核心库
依赖项,QGIS界面库
QGIS所有的界面
读取栅格数据驱动
读取矢量数据驱动
6. 安装
将qgis项目设为启动项目,点击ISTALL安装,可能会出现缺少的错误,
其原因是环境变量中没有添加所在的目录C:OSGeo4Wbin;或者直接将
拷贝到vs目录下,继续ISTALL安装,安装完成之后,点击安装目录下的,默认安
装目录为C:Program Filesqgis2.6.0bin,出现QGIS界面提示,说明安装成功。




附:注意问题
(1) 环境变量设置
除了运行自动设置环境变量外,一定要把win flex_bison的解压目录、OSGeo4W
安in目录、Cmake安in目录、目录添加到环境变量Path中;

解决方法:环境变量最好全部都提前设好,避免编译出现其他错误。

(2) win flex_bison一定要解压到没有空格的目录下,并且在CMake中要配置正确路径,
否则,可能出现C:GnuWin32win_flex_bisonwin_: m4 :o such file or directory
或者Project: error PRJ2019:某个工具从以下位置返回了错误代码:“Generating
”等类似错误,
解决方法:
a) C:GnuWin32win_flex_bisonwin_: m4 :o such file or directory,问题只能是重
新解压win flex_bison到无空格的路径
b) CMake中Bison路径设置不正确可能会导致生成问题,

打开可以看到,编译出错位置的命令,

除了正确配置CMake路径之外,还可以通过手动编译来解决:
在命令行进入到win flex_bison解压目录,运行:
win_ -oF:QGISbuildsrccore –d –v –t
F:QGISSourceqgis-2.6.0srccore
则可生成。


c) 也有可能由于CMake中Flex路径设置不正确导致flex_生成问题,

本应该为:C:GnuWin32win_flex_bisonwin_ (本人为复现错误,估计修改的)

打开可以看到

同样,除了配置CMake路径外,可手动运行:
win_ -oF:QGISbuildsrccoreflex_
F:QGISSourceqgis-2.6.0src core
可生成flex_。

(3) 将unistd.h头文件添加到VS2008安装目录下的include中去;C:Program FilesMicrosoft
Visual Studio 9.0VCinclude
作用: 如果没有添加,生成的qgpressionparser为.c文件,而不是.cpp

若添加unistd.h,则生成:

unistd.件可以从旧版本GU安装目录Include下获取。

(4) 如果安装了低版本的flex和bison,可能出现问题:
Line22: “..srccore” Unrecognized %option
或者 Line24: “..srccore” Unrecognized %bison-bridge
因此只能安装新版的win flex-bison

(5) 注意,CMake中的SPATIALITE_ICLUDE_DIR的目录得设为C:OSGEO4Winclude,
而不能设为C:OSGEO4Wincludespatialite,否则编译的时候可能会出现error
C3861:”spatialite_init”:不到标识符。


可参考的文件:
1. Building QGIS from source - step by step 文件
2. Using flex and bison in MSVC++
3. 《Visual Studio custom build rules- These steps help you setup custom build rules for Visual
Studio 2010 and up.》


其他:
http:�����˶���blogitem
http:Bug?id=9634
http:ajeyonearchive20110512
http:sblog_
http:gisstararticledetails4249225
http:wsh6759articledetails6894073
http:ryanzllarticledetails6217142


后记:搞了三四天终于搞定了,一定要认真细心环境变量的设置和CMake目录的设置会减
少很多麻烦,其次,安装最新版的win flex_bison, 其他问题也都会迎刃而解的。

-

WinXP+VS2008+qgis2.6.0源码调试笔记(离线安装)

发布时间:2022-03-28 12:42:57
文章版权声明:除非注明,否则均为IT技术网-学习WEB前端开发等IT技术的网络平台原创文章,转载或复制请以超链接形式并注明出处。

发表评论

评论列表 (有 15 条评论,677人围观)

最近发表

随便看看

热门文章

标签列表