QGIS编译

修改时间:2014-5-10

 

1.参考

首先列出一些参考的网页:

李民录: 

 http://blog.csdn.net/liminlu0314/article/details/17400075

官网:

http://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html#toc13

 

2.准备

1)源码

本文使用QGIS的版本是2.0.1,下载地址https://github.com/qgis/QGIS/tree/release-2_0,选择下图红色方框,


或者从http://qgis.org/downloads/下载,这里可以下载到所有版本的QGIS。

在VS2010平台上编译。

 

2)工具与依赖库

工具

Tool

Website

CMake

http://www.cmake.org/files/v2.8/cmake-2.8.4-win32-x86.exe

Flex

http://gnuwin32.sourceforge.net/downlinks/flex.php

Bison

http://gnuwin32.sourceforge.net/downlinks/bison.php

SVN

http://sourceforge.net/projects/win32svn/files/1.6.13/Setup-Subversion-1.6.13.msi/download

or GIT

http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe

OSGeo4W

http://download.osgeo.org/osgeo4w/osgeo4w-setup.exe

这是从官网复制下来的,其中SVN与GIT为下载源码的工具,不是必须的。

cmake、flex、Bison这三个工具网上都说安装路径不能有空格中文。

OSGeo4W用来下载依赖库(下载下来的依赖库都是release版本的,官方建议用RelWithDebInfo编译QGIS,我用release与Debug编译出错,但是我还没具体使用。李民录也用DEBUG编译没问题。)

依赖库包括如下,这些是官网推荐的,但是不是必须的,有些可以用内部编译的方式。可以先看完文章下一部分,再对应着在OSGeo4W中下相对应的库。

l  expat

l  fcgi

l  gdal

l  grass

l  gsl-devel

l  iconv

l  pyqt4

l  qt4-devel

l  qwt5-devel-qt4

l  sip

l  spatialite

l  libspatialindex-devel

l  python-qscintilla

上述也是从官网上复制的,使用 OSGeo4W (select Advanced Installation),它会把依赖库的依赖库一并下载。

当然还要安装QT。安装完OSGeo4W与QT,都需要设置相应的环境变量。

3.编译

1)首先安装flex、Bison,安装路径不能有中文与空格,然后把安装的BIN路径添加到环境变量中去。默认的两者安装路径是一致的,所以一个文件夹下会同时出现flex与Bison的EXE文件,但是默认安装路径Program Files有空格,很方便的改一下就行,我安装到了C:\QGIS。

再把C:\QGIS\include\unistd.h文件拷贝至VC10的安装目录D:\ProgramFiles\Microsoft Visual Studio 10.0\VC\include,我VS2010安装在D盘。这一步操作是因为后面编译的时候提示没找到unistd.h文件,也可以先不操作,等后面编译的时候出现这个错误再说。

2)配置Cmake

首先还是新建一个Build文件,再在Cmake里面安置好路径, 编译器选择的是VS2010

第一次按Configure提示需要设置Flex执行文件的路径


然后是需要设置Bison执行文件的路径


接下来提示设置PROJ和GEOS库



接下来是GDAL


设置SQLite3和Expat的库



spatialindex库的路径

这个库OSGeo4W中好像没有头文件,所以我自己下载了一个,下载地址

http://download.osgeo.org/libspatialindex/libspatialindex-1.8.0-win-msvc-2010-x64-x32.zip


除此之外,我还设置了QWT


最后需要设置SetupAPI库的路径,这个库在程序安装目录的Windows SDKs目录里面C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\SetupAPI.Lib


根据情况选择是否允许以下工具一起编译:

WITH_BINDINGS--------Python

WITH_GRASS-------------Grass

也就是内部库外部库的选择,这里我选择如下,



这些都设置完了,可能会出现SIP的错误,提示没找到这个,这时候就需要安装SIP,安装SIP之前要安装mingw32,可以借鉴

http://blog.csdn.net/sunny2038/article/details/7237630

http://blog.csdn.net/sunny2038/article/details/6918602

首先安装mingw32,现在都是用mingw-get-setup.exe进行在线安装,下载地址http://cznic.dl.sourceforge.net/project/mingw/Installer/mingw-get-setup.exe

默认设置之后会出现界面,我已经安装了部分,所以前面出现了绿色方框


选择要安装的package右击markfor installation,然后installation-apply changes,可能因为网速原因,可能会出现错误,提示没下载好,这时候就需要多次installation-applychanges,直到所有下载全为止。

之后就需要下载SIP,下载地址

http://www.riverbankcomputing.co.uk/software/sip/download/

将Riverbank上的sip的zip格式的代码包下载,将其解压到C:\Python27中(我的安装在D:\Program Files\Python275,但是图用的是上面介绍的博文中的),那么现在sip的文件夹路径为C:\Python27\sip-4.13.2\sip-4.13.2(你也可以将其解压到任何一个文件夹中,但这里为了叙述方便,就解压到我电脑上的Python的文件夹中)。

打开Windows的cmd命令行,输如cd C:\Python27\sip-4.13.2\sip-4.13.2跳转到sip文件夹下。  输入python configure.py --platform win32-g++。进行配置,显示结果如下:



再完成上一步后,输入mingw32-make,接着输入mingw32-make install。若无意外,SIP就安装完成了。

这些都设置完了应该就没错误了,然后Configure

打开SLN进行编译,生成140个项目,但是会有一个项目出现C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: “cmd.exe”这样的错误,我索性把这个项目删了,李民录的博文中介绍的是生成139个项目

等待编译完即可。

 

4.附录

1)李民录博文还提及:

注意:在编译的时候如果没有将GNU的几个软件安装到没有空格的路径中,或者没有加入环境变量path中,很有可能编译出错,错误信息一般如下:

下面我们就通过手动的方式来解决这个问题,首先在工程中找到编译出错的文件。首先来看qgis_core的错误,

[plain] viewplaincopyprint?

1.         1>Generating qgsexpressionparser.cpp  

2.         1>E:\QGIS\GnuWin32\bin\bison.exe: m4: No such fileor directory  

3.         1>Project : error PRJ0019: 某个工具从以下位置返回了错误代码:"Generating qgsexpressionparser.cpp"  

4.         1>生成日志保存在file://e:\QGIS2\Build\src\core\qgis_core.dir\Debug\BuildLog.htm  
我们打开上面的BuildLog.htm,会发现下面的文字:

出错的就是上面选中的那句执行的时候出错了,由于bison所在的目录没有安装到环境变量path里面导致的,我们将上面的这句话复制下,然后打开一个cmd命令行窗口,cdbison的目录,如下图:

然后在窗口中执行上面的那句话,如果没有输出任何信息就说明OK了,然后回到VS中,继续点击生成即可,其他的flex错误类似这样解决即可。

如果之前没有配置SPATIALITE,所以我们需要修改源代码,编译的时候提示spatialite.h文件找不到的,将include“spatialite.h”注释掉,然后再次编译会提示有函数spatialite_initspatialite_versionspatial_ref_sys_init找不到的,将该行注释掉,然后编译即可。

 所有的工程编译完之后,会在Build目录下面的output\bin\debug\目录生成dllexe,然后只需要将QGIS所有依赖的dll拷贝过来就可以双击qgis.exe运行了。依赖的dll主要有gdalgeosprojqtqwt等。需要注意的是,要把gdalprovider.dllogrprovider.dll放到exe目录的plugins目录,否则不能打开数据。目录结构如下图。

下面是编译完启动的界面。如果想要界面汉化的话,使用QT提供的Linguist(语言家)工具,打开QGIS源码目录下的i18n目录下面的qgis_zh_CN.ts,然后点击文件菜单下面的发布为,将存储为一个qgis_zh_CN.qm的文件,最后将这个qm文件放到qgis.exe所在目录中新建一个i18n的目录,放到里面重新启动qgis就可以看到界面汉化了。

 

你可能感兴趣的:(QGIS编译)