现在的位置: 首页 > 综合 > 正文

编译qgis小结

2013年01月26日 ⁄ 综合 ⁄ 共 4253字 ⁄ 字号 评论关闭

花了半天时间编译qgis,简单小结一下:

主要参考:http://www.qgis.org/api/INSTALL.html 

 

==============================================

安装前注意事项:文件夹名字尽量不要用中文和空格,可能会出错

==============================================

 

0、下载QGIS和QGIS源码

0.1 下载QGIS,我直接在官网上的下载页面进行下载:http://hub.qgis.org/projects/quantum-gis/wiki/Download

目前的版本是1.8.0,直接的下载地址是:http://qgis.org/downloads/QGIS-OSGeo4W-1.8.0-2-Setup.exe

0.2 下载QGIS源码,可以直接在上面的下载页面的最下方下载源码

我直接下载压缩好的包,因为我平时很少用git,其地址是http://qgis.org/downloads/qgis-1.8.0.tar.bz2

也可以通过git源码管理器下载,git clone git://github.com/qgis/Quantum-GIS.git

 

1、下载编译工具

1.1 下载并安装CMake,由于我之前已经有过用cmake编译的经验,直接使用已经安装好的版本,我用的是2.8.8版本

1.2  下载并安装Flex和Bison,由于网站给出的链接已经无效,我又找了sourceforge上的版本http://sourceforge.net/projects/winflexbison/

我直接放在了cmake文件夹下 直接的下载地址是:http://jaist.dl.sourceforge.net/project/winflexbison/win_flex_bison-2.3.zip

1.3 下载OSGeo4W,其下载地址是:

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

 

2、使用OSGeo4W下载并安装一些qgis需要的库

2.1 启动OSGeo4W,选择Advanced Installation进行高级可配置化安装,点击下一步

2.2 Install from Internet 点击下一步,设置安装根目录,我设置为D:\OSGeo4W,点击下一步,设置包目录,我也设置为D:\OSGeo4W

此处也可以通过仅先下载,设置包目录,等下载完后,可通过再次启动进行安装,设置安装目录,这样可以进行离线操作,或进行从别的机器下载到另一台机器安装

2.3 在选中包页面中,select packages 按分类中找到libs下勾选以下必须库

  • expat
  • fcgi
  • gdal                  -- 这个可以不选择,使用下一步骤QGIS中的安装即可
  • grass                -- 这个可以不选择,使用下一步骤QGIS中的安装即可
  • gsl-devel
  • iconv
  • pyqt4
  • qt4-devel
  • qwt5-devel-qt4
  • sip
  • spatialite
  • libspatialindex-devel
  • python-qscintilla

    2.4 等待下载和自动安装

     

    3、安装QGIS到OSGeo4W安装包一致的目录

    其中QGIS中大多数的库都是用OSGeo4W下载好的离线包进行安装的,因此这个过程和2中的过程的作用具有一定的相似性。

    其目的是利用现有的QGIS安装程序,免去下载gdal geos grass proj osgEarth 等与GIS相关比较大的"大库"

    需要注意的是安装时选择的目录需要与OSGeo4W安装包一致的目录

     

    4、在OSGeo4W目录下写个cmd批处理脚本,比如我取名叫setup.bat

    我是依照网站上的例子按自己的目录情况写的

    @echo off
    path %SYSTEMROOT%\system32;%SYSTEMROOT%;%SYSTEMROOT%\System32\Wbem;D:\CMake-2.8.8\bin;
    set PYTHONPATH=

    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 Platform SDK for Windows Server 2003 R2\include
    set LIB=%LIB%;%PROGRAMFILES%\Microsoft Platform SDK for Windows Server 2003 R2\lib

    set OSGEO4W_ROOT=D:\OSGeo4W
    call "%OSGEO4W_ROOT%\bin\o4w_env.bat"

    @set GRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.3RC2
    @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
    @set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib

    @cmd

     

    以上与微软开发环境相关的东西可能本机并没有安装,但也可以先这么写着,应该不会报错

     

    5、进行CMake编译

    5.1 运行cmd,运行步骤4的脚本,比如我在cmd中

    C:\>  D:\ 回车

    D:\> D:\OSGeo4W\setup.bat

    运行后显示OSGEO4W home is D:\OSGeo4W

    5.2 从cmd中运行cmake-gui.exe,重点是需要从cmd中运行,这样才可以获得到相应于5.1执行后得到的一些变量

    5.3 在Where is the source code中输入源码的位置,比如我将源码解压在D:\QGIS下,

    Where to build the binaries中输入生成的工程目录,比如我设置在D:\QGIS\build下

    5.4 点击Configure时选择自己的vs环境,我选择了vs2010

    5.5 遇到找不到Flex和Bison路径时,需要把刚才下载的Flex和Bison的目录设置后再继续

    5.6 遇到找不到geos、sqlite3等包含头文件目录时,统一设置为D:\OSGeo4W\include,找不到库目录时统一设置为D:\OSGeo4W\lib,

    5.7 遇到其他一些py的问题,很可能是步骤2没安装好

    5.8 最后还可能遇到一个问题是setupapi找不到,可以先暂时随便设置一个错的,比如我设置的D:\a.lib

    5.9 Configure完后没问题了就可以genarate,有问题就需要年是不是步骤2和步骤4的过程有问题

    5.10 如果需要其他一些配置,可以自己研究

     

    6、在vs2010中编译

    6.1 从 build文件夹中找到由cmake生成的2010解决方案文件qgis.sln

    6.2 编译qgis_core,qgis_gui,qgis_analysis,qgis这四个库

    注意不能直接选择Debug编译选项,而要选择Relase或者RelWithDebinfo,因为OSGeo4W中的库是没有degug信息的

    当找不到5.8中设置的错误setupapi库时,如找不到D:\a.lib需要在工程属性/链接器/输入/附加依赖项设置中删除该引用

    当编译结束发现无法找到setupapi引用的函数时,需要把相应的几个函数内容屏蔽,不影响程序生成,只影响后续安装

    如果希望能正确安装,还需要根据自己的系统下载相应的window开发 sdk,我嫌麻烦就没弄了,我屏蔽了以下函数:

    src\core\gps\qextserialport\qextserialenumerator.cpp文件中的

    enumerateDevicesWin、matchAndDispatchChangedDevice、getDeviceDetailsWin三个函数的内容

    5.3 成功编译后,需要设置qgis项目为启动项,并在工程属性/调试/工作目录设置为D:\OSGeo4W\bin,

    5.4 启动调试,正常情况下已经可以跑起来了,不正常情况可能遇到以下问题:

    无法找到sqlite3.dll,其实这个文件在D:\OSGeo4W\bin下,我把它拷贝到qgis生成的目录下,如

    D:\qgis-1.8.0\build\output\bin\RelWithDebInfo\

    如果说没找到其他库,估计是工作目录设置不对,或者看工作目录下是否有那个库

    如果遇到0xc000000d无法启动的错误,那就比较悲剧,

    不过我的解决方案是把以上几个工程属性/链接器/清单文件/生成清单设置为否,再链接并调试就没问题了,参考如下:

    http://stackoverflow.com/questions/5648391/c-application-fails-to-start-correctly-0xc000000d

     

    =================================================

    关键问题解析

    1、使用OSGeo4W和QGIS的安装包都是为了提供一整套代码编译过程中需要依赖的工具和库,

    一方面是c++的头文件和lib,另一方面特别是python相关的东西我是搞不定的

    如果发现有文件找不到,可以先查找一下文件夹下是否存在,如果不存在可能是下载安装有问题,

    如果存在,但找不到再看是不是目录设置错误,或者是脚本路径没写对

    2、从cmd里运行,并且写步骤4中的脚本都只是为了提供一些路径的快速设置,

    以便cmake只需要一个根目录就可以快速找到其他的目录

    如果你发现cmake中还需要设置大量的位置问题,那就是没写好bat

    3、目录的设置还是有一点诀窍的,源码是需要依赖库文件的,

    因此所有的库文件肯定是要统一管理,而OSGeo4W的组织方式统一,很方便使用,

    源码可以不和OSGeo4W放一起,但最后生成的程序是需要再放到其依赖库下进行链接dll

    =================================================

     

    小结:

    刚开始整了半天,感觉东西很多很杂的样子,但最后领悟到一些关键点后,

    重新整的时候只花了不到半个小时,所以还是希望大家吸取经验,不要再搞半天也搞不定呀

     

  • 抱歉!评论已关闭.