Win7+VS2010+QGIS2.0以上版本编译流程

ufolr原创,转载请注明:

转载自ufolr的博客 原文连接:http://blog.csdn.net/ufolr/article/details/38144793


        QGIS可以说是目前最出名的开源项目之一,其由QT(C++)开发,并且借鉴了前辈GRASS的源码,而且其可视化抄作界面相当友好,可以算是一个开源的ArcGIS。

        要对QGIS做学习研究,首先就需要下载其源码,并在本地编译。我也是借鉴了多篇网上的博文反复失败无数次才成功编译通过。

        由于是QT开发,个人比较习惯用QT自有的IDE环境进行开发,所以我最初遍尝试用Qt Creator来进行编译,在QtCreator中打开Cmake.List文件,并配置好Cmake后(配置方法与VS2010下编译类似)进行编译,只能全部编译(Build ALL)无法选择部分项目进行编译,而且编译到qgis_help的时候出现:

        “默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library”  警告,而导致连接的时候出现错误:

        “MSVCRTD.lib未找到 LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用”

        这个问题怎么在QtCreator中解决我一直没搞清楚,因为是使用Cmake,这是对qmake的mkspecs进行调整是无效的,而调整cmake的Build参数我实在不知道怎么搞,同时因为官方编译也是使用VS进行,加之在VS中可以选择编译指定部分,于是我决定利用VS来编译代码,然再在QtCreator中进行调用。


一、环境搭建:

1.QGIS源码:从http://qgis.org/downloads/下载需要的发行版源码。最下面的压缩包就是打包好的源码。

2.osgeo4w: 从http://download.osgeo.org/osgeo4w/下载osgeo4w这里应该选择32位版本也就是osgeo4w-setup或者osgeo4w-setup-x86;

                        运行osgeo4w,安装所需库:

  • expat
  • fcgi
  • gdal
  • grass
  • gsl-devel
  • iconv
  • pyqt4
  • qt4-devel (该库个人觉得装了qt就不用装了,可以在cmake配置时指定自己的qt库位置,但是在早前的试验中我安装了,也就没管了)
  • qwt5-devel-qt4
  • sip
  • spatialite
  • libspatialindex-devel
  • python-qscintilla 

3.Flex和Bison:在http://download.csdn.net/detail/ufolr/7608673下载FlexAndBison解压即可用,建议存放位置不要有中文不要有空格。

由于其官网给的下载地址(大多数编译博文中的下载地址)下载的Flex和Bison年代久远,会出现一些莫名其面的情况,比如找不到文件什么的:

即报错:C:\QGis\GnuWin32\bin\bison.exe: m4: No such file or directory。

网上的解决办法是自己手动从命令行cd进入bison目录然后手动编译指定文件。

于是我找了个比较新的Bison和Flex,再没遇到相关错误。

4.Cmake:从http://www.cmake.org/files/下载Cmake并安装,最近出了3.0版本没实验过,我使用的是2.8.12.2版本的,建议安装32位版本即win32-x86版本,exe是安装版,zip是绿色版


二、配置环境

1.系统变量设置:确认你的系统变量path中有你的\OSGeo4W\bin目录所在位置,这个很重要,如果没加可能出现编译后程序启动报错:0xc000007b

这个错误是因为程序找不到相关dll,所以需要你在系统变量中加入你的osgeo4w的bin目录。

2.用记事本写一个批处理文件

@echo off
set VS90COMNTOOLS=%PROGRAMFILES%\Microsoft Visual Studio 9.0\Common7\Tools\
call "%PROGRAMFILES%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86

set INCLUDE=%INCLUDE%;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\include
set LIB=%LIB%;%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\lib

set OSGEO4W_ROOT=C:\OSGeo4W                                           ---------》这里修改为自己的osgeo4w目录
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%;%PROGRAMFILES%\CMake 2.8\bin;%PROGRAMFILES%\GnuWin32\bin  ---------》这里指定自己的Cmake目录,可以用绝对位置。

@set GRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.4                   ---------》这里修改为自己安装osgeo4w中grass-版本号目录位置
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib

@cmd
系统环境变量PATH中路径之间分号的前后不要加空格,否则CMake解析路径时出现错误。

保存为qgis.bat,存放在osgeo4w根目录。

3.运行qgis.bat批处理程序,并在这个批处理出现的命令行窗口中CD进入Cmake安装目录,并运行Cmake-gui:

Win7+VS2010+QGIS2.0以上版本编译流程_第1张图片


出现Cmake-Gui界面,在上面分别浏览并选择QGIS源码目录和编译输出目录

Win7+VS2010+QGIS2.0以上版本编译流程_第2张图片


点击Confisure,会要求选择编译器类型,这时候如果是VS2010就选Visual Studio 10

Win7+VS2010+QGIS2.0以上版本编译流程_第3张图片


Finish,然后继续,配置过程中可能报错,说缺少需要的东西比如Flex啊,Bison啊,SetupAPI 啊,可能以报错就红了一大篇,这个时候不要惊慌,只需要看下面的输出日志,看缺少什么,我们就找到对应的缺少的项,然后浏览并选定缺少的项就可以了,如:

缺少Flex:

Win7+VS2010+QGIS2.0以上版本编译流程_第4张图片

点击浏览按钮找出Flex.exe就可以了,然后继续Confisure

缺少bison:

Win7+VS2010+QGIS2.0以上版本编译流程_第5张图片

和之前相同,找出Bison,然后继续Confisure

缺少SetupAPI:

Win7+VS2010+QGIS2.0以上版本编译流程_第6张图片

和之前的方法一样,

这里说下,使用vs2010的话,其SetupAPI应该是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\SetupAPI.Lib。

当配置完不抱错的时候,也就是输出日志里出现Configuring done,说明配置完成。


然后点击Generate按钮,Cmake就会在输出目录里生成VS2010的项目和工程文件,这是去输出目录直接双击打开该项目文件即可。

Win7+VS2010+QGIS2.0以上版本编译流程_第7张图片


进入VS2010后,将编译编译模式由Debug修改为relWithDebugInfo,这是因为osgeo4w里的库是release版本的,我们的工程也需要与之对应,但我们又想要调试,那么就设置为relWithDebugInfo模式,编译输出为release版本,同时保留了调试信息。

1.如果希望编译整个工程,那么就设置BuildALL为启动项,然后编译,


2.如果只是希望编译几个核心文件,可以设置qgis为启动项,然后编译(vs会自动编译其依赖项:gui,core,analysis)

同时由于Qgis的数据读取是以插件形式提供,你还需要单独手动编译一下数据读取插件

常用的数据插件:1. ogr:ogrprovider; 2. gdal:gdalprovider


编译成功后就可以运行了


参考资料:

QGIS官方安装文档:http://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html

李明录 QGIS编译:http://blog.csdn.net/liminlu0314/article/details/17400075

bjlqw的编译问题集:http://blog.csdn.net/bjlqw/article/details/23560667(部分问题的不一定对,但对于大部分问题可以参考)


你可能感兴趣的:(C++,编译,cmake,qgis)