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,安装所需库:
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:
出现Cmake-Gui界面,在上面分别浏览并选择QGIS源码目录和编译输出目录
点击Confisure,会要求选择编译器类型,这时候如果是VS2010就选Visual Studio 10
Finish,然后继续,配置过程中可能报错,说缺少需要的东西比如Flex啊,Bison啊,SetupAPI 啊,可能以报错就红了一大篇,这个时候不要惊慌,只需要看下面的输出日志,看缺少什么,我们就找到对应的缺少的项,然后浏览并选定缺少的项就可以了,如:
缺少Flex:
点击浏览按钮找出Flex.exe就可以了,然后继续Confisure
缺少bison:
和之前相同,找出Bison,然后继续Confisure
缺少SetupAPI:
和之前的方法一样,
这里说下,使用vs2010的话,其SetupAPI应该是C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\SetupAPI.Lib。
当配置完不抱错的时候,也就是输出日志里出现Configuring done,说明配置完成。
然后点击Generate按钮,Cmake就会在输出目录里生成VS2010的项目和工程文件,这是去输出目录直接双击打开该项目文件即可。
进入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(部分问题的不一定对,但对于大部分问题可以参考)