• 编译qgis


    转自:http://blog.csdn.net/jk276993857/article/details/8733113

    花了半天时间编译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%System32Wbem;D:CMake-2.8.8in;
        set PYTHONPATH=

        set VS90COMNTOOLS=%PROGRAMFILES%Microsoft Visual Studio 9.0Common7Tools
        call "%PROGRAMFILES%Microsoft Visual Studio 9.0VCvcvarsall.bat" x86

        set INCLUDE=%INCLUDE%;%PROGRAMFILES%Microsoft Platform SDK for Windows Server 2003 R2include
        set LIB=%LIB%;%PROGRAMFILES%Microsoft Platform SDK for Windows Server 2003 R2lib

        set OSGEO4W_ROOT=D:OSGeo4W
        call "%OSGEO4W_ROOT%ino4w_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:OSGeo4Wsetup.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:QGISuild下

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

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

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

        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,我嫌麻烦就没弄了,我屏蔽了以下函数:

        srccoregpsqextserialportqextserialenumerator.cpp文件中的

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

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

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

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

        D:qgis-1.8.0uildoutputinRelWithDebInfo

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

        如果遇到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

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

        小结:

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

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

  • 相关阅读:
    【tyvj1952】easy
    【noip2005】篝火晚会
    BZOJ4818: [Sdoi2017]序列计数
    BZOJ2436: [Noi2011]Noi嘉年华
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4540: [Hnoi2016]序列
    BZOJ4827: [Hnoi2017]礼物
    BZOJ3527: [Zjoi2014]力
    BZOJ4407: 于神之怒加强版
    BZOJ1854: [Scoi2010]游戏
  • 原文地址:https://www.cnblogs.com/leoking01/p/14230056.html
Copyright © 2020-2023  润新知