经过刚好一个星期,我终于把QGis进行二次开发的环境搭建好了,在这里分享下我的经验,希望能够对正在进行这方面研究的朋友有一定的帮助,别像我一样走了那么多弯路。
我所使用的系统为Windows8.1企业版,成功编译QGis1.8.0,使用VS2008编译,但是在二次开发的时候我使用了VS2010。我最开始编译的是QGis2.2.0的源代码,分别用VS2008和VS2010编译,但是一直没有编译成功,有编译成功的朋友也请指点我一下,谢谢!
OK,进入正题。首先提供一个只希望编译并参考QGis源代码的简单编译方法,这个方法我也是在李民录的博客上面看到的,点击这里查看。这个方法我虽然能够编译成功,但是在程序运行的时候还是出现了“无法定位动态链接库的错误”,并且夹杂了很多乱码,但是网上很多朋友说使用这个方法成功编译并运行,因此大家也值得试一试。不过最后不会自动安装开发需要的库文件,具体怎么手动提取我也不清楚,有会手动提取的朋友,请不吝赐教,谢谢!
下面讲我成功编译并且成功实现QGis二次开发的方法,供大家参考。
首先是安装编译所需的第三方库,与李民录的博客里面讲述的大致相同,但是有用OSGeo4W进行安装可以一次将大部分需要的库都安装上,方法是:首先下载OSGeo4W,在进行安装的时候要注意,最好不要安装在带中文或者空格的路径下,例如"C:\开发库\..."或者“C:\Program files\....”都不可以(后者其实也可以,但是后面在设置路径的时候有点麻烦,如果你非要那样做,解决办法在QGis官方安装文档中有说明,我将其中Windows的部分粘贴出来放在另一篇博文中,点击这里查看)。安装时,选择Advanced Install,下一步选择DownloadInstall(选项的具体名字我忘记了,但是意思是一样的),这时,出现了一个对话框,你可以在其中输入你需要安装的库的名字,然后,在下面点击进行下载安装,注意:OSGeo4W是不会列出你最后选择了安装哪些库的,所以这里一定要细心!需要安装的库有:
- 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
安装好这些库之后,进行编译所需的工具的安装,具体工具有:
CMake
Flex
Bison
SVN
GIT
Qt(这个注意下载大于等于4.7以上的版本)
其中SVN和GIT是为了获取QGis源代码的,你如果选择自己在官网下载,也可以不装这两个工具。安装这些工具的时候,同样注意前文所述的路径问题,不要安装在带中文或者空格的路径中。Flex和Bison推荐把安装目录的bin文件夹路径加入系统环境变量Path中,后面会少一些麻烦。当然Visual Studio2008是不可缺少的(也可以使用VS2010试试,并告诉我结果,谢谢!)。
OK,现在基本就是完成工具的安装了,现在开始编译吧。下面的过程跟官方给的有点区别,点击这里查看官方文档。
第一步打开Cmake-gui.exe, 出现如下界面(第一次打开时中间栏是空白的):
出现红色的地方,就将刚刚下载的第三方库的include和lib文件路径对应填进去,由于我们很多库是在OSGeo4W里面下载的,因此路径大多相同,比如下面这样填写。
注意:我的GDAL并不在OSGeo4W路径中,CMAKE的路径是QGis在VS2008中编译完成后库目录的安装路径。GRASS和POSTGES可以不填写。
然后会提示选择环境setupAPI的路径,如下图:
完成选择以后,再点击configure,这时应该就能够成功了,输出窗口出现configure done以后,点击Generate,出现Generate done以后,就表示工程生成成功了。
这时,打开工程的输出路径,可以看到文件夹里面已经生成了一大堆文件,如下图所示:
红色框标记为VS2008的工程文件,双击打开它。进入工程以后,在解决方案下面有很多项目。
首先找到qgis_core、qgis_gui和qgis_analysis这三个工程,它们是QGis项目的底层依赖项,一个个单独生成它们,如果出现错误,可以参考李民录的博客最后几步,手动生成即可。
按照李民录的博客中记载的,如果只需要让QGis运行起来,大可以只编译几个工程,但是我不知道如何手动提取二次开发库,有知道的朋友可以交流下。生成二次开发库是编译INSTALL工程的输出结果,但是我单独编译INSTALL并不成功,我是将整个解决方案全部编译才成功的,耗时比较长。编译过程中可能会出现Spatialite相关的错误,我的做法是直接将错误代码注释掉就行了,不影响后面安装。
最后完成会在安装路径下得到开发库文件,如下图:
下一篇博文,我会着重介绍QGis二次开发环境的搭建以及需要注意的地方,希望大家多多交流。