最近项目要用到gis软件,选了开源软件gis,这个软件最大的不便就是没有提供开发包,还要自己编译,开始准备看有木有编译好的文件,发现这方面的资料不多,没办法,只有自己动手,丰衣足食了。下面开始编译的过程: 我的编译环境是win7+QGIS2.4+vs2010+qt4.8.5,官网上有一个编译教程,参看这里,下面我就说下我的编译过程:
1.下载所需软件
2.安装软件
_注意:所有的安装路径都尽量不要有空格和中文,不然后面会很麻烦。_
首先安装编译所需要的库,在安装OSGeo4w时,选择advanced install->install from Internet,其他默认,然后到了安装库文件的地方,选择搜索安装下面的这些库:
- Proj >=4.4.x
- GEOS >= 3.0
- Sqlite3 >=3.0.0
- GDAL/OGR >=1.4.x
- Qwt >= 5.0& (< 6.1 with internal QwtPolar)
- expat
- fcgi
- gdal
- grass
- gsl-devel
- iconv
- pyqt4
- qt4-devel
- qwt5-devel-qt4
- sip
- spatialite
- libspatialindex-devel
- python-qscintilla
- expat
安装好库之后安装剩余的其他软件,讲flex和bison的bin路径加到环境变量path中去。
3.生成编译文件
安装好所有的东西之后,打开CMake-gui,首先配置前两个source code和build the binaries,分别是源文件的路径和生成的编译文件的路径,配好之后点击Configure,选择VisualStudio10,也就是vs2010,然后就会出现一片红色报错,那是因为我们还没有配置好库的路径,分别配置好库的路径之后继续点Configure,然后直到最后没有报错出现Configuring done,最终的配置如下图所示:
注意:CMAKE的路径是最后编译后的文件生成路径,直接新建一个空的文件夹就行。把with里面的withbindings勾选去掉,还有一个问题就是expat的库,我安装osgeo4w时,安装expat后找不到他的库,然后我又重新下载编译的,如果你的osgeo4w的库里面有的话,直接添加,如果没有的话就跟我一样,重新下载编译,其他的你找不到的库就留空就行。 最后点击Generate,然后到你的build binaries里面看是不是生成了很多的文件,包含一个vs的工程文件,如下图所示:
4.编译工程
打开vs2010,打开qgis2.4.0.sln,然后里面就导入所有的工程,你可以选择生成整个解决方案,那样时间会很长,如果只是需要得到开发库文件的话,只需要编译install工程,但是单独编译这个工程好像不行。
注意 : 1.在编译的过程中可能会提示找不到unistd.h文件,讲flex安装目录下的include文件夹下的unistd.h复制到D:\Program Files\Microsoft Visual Studio 10.0\VC\include(vs的安装目录)里,然后重新编译就可以了。
2.编译过程中可能会报spatialite相关的错误,解决方案是讲osgeo4w/include目录下的spatialite.h文件复制覆盖到osgeo4w/include/spatialite文件加下。重新编译。
最后就可以在CMAKE填的那个路径下面看到生成的所有文件。类似下图所示:
接下来就可以得到完整的开发库了,inlude文件夹下是所有的头文件,lib文件夹下包括四个主要的lib文件,bin文件夹下包括四个主要的dll文件。
注意 :要使项目运行,还要将qgis安装目录(别跟编译目录搞混,在官网可以下载)下的bin文件夹下的所有dll文件和刚才得到的四个dll文件放在一起构成运行的所有需要的dll文件,在运行的过程中,还有可能提示缺少libxml2.dll,直接在网上下载或者安装osgeo4w时,勾选libxml2,到bin目录下拷贝一份到项目的dll文件目录中。
至此,所有编译和配置环境相关的工作就完成了,大家在编译或者配置的过程中也许还会碰到其他的问题,欢迎与我交流。