osgEarth 编译说明

最近,参与的一个项目需要搭建虚拟地球平台,再三比较之后选择了osgEarth作为平台基础。但是,对其的编译流程,官网上语焉不详,而搜到的许多教程大都忽视了细节,导致自己在编译的过程中遇到了许多困难,最后终于正确编译。简单总结一下记录与此。

osgEarth 编译方法

编译环境为CMake 2.8.6和VS2010(32bit)。

(如果代码在c盘,无论是IDE还是控制台窗口都需要使用管理员权限,否则可能导致无法成功写出文件)

首先下载所有的依赖库和源代码:(见官方链接,本文暂不包括SQLite和v8)http://www.osgearth.org/wiki/Downloads

可以采用GIT直接Clone,也可以下载完整的源码压缩包(GIT速度非常快)。需要注意的是,目前的版本2.1.1的编译中需要在CMAKE中分别指定zlib,minizip和libzip的路径,其中zlib是必须的,minizip包含在zlib中,而libzip则需要另外下载(以后可能会考虑舍去libzip,见: forum.osgearth.org/libzip-minizip-amp-zlib-td6926194.html )。另外,OSG的第三方库中包含了GDAL等库文件,但是由于其版本可能较旧,在以下每一步编译完成后都需要拷贝并替换OSG第三方库中的相同文件。

编译的顺序为:
1st GDAL GEOS cURL zLib libzip
2nd OSG
3rd osgEarth

GDAL提供了vs的工程文件,直接打开最新版本的工程,然后自动转换后编译即可。可以根据需要编译DEBUG或RELEASE版本。编译后的结果为gdal19.dll和gdal_i.lib。
在编译完成之后,将其中alg、gcore、ogr、port文件夹下的.h文件拷贝到osg第三方库目录中的include下,将gdal_i.lib gdal.lib cpl.lib (port目录下) ogr.lib (ogr目录下), 以及gdal19.dll分别拷贝到OSG第三方库中的lib和bin目录下。

GEOS的编译方法见目录中的README,讲的很清楚,但是其中的编译设置没有更新。
首先运行Autogen.bat,然后调用nmake /f makefile.vc MSVC_VER=1600 BUILD_DEBUG=YES。其中,1600表示vs2010的版本号,BUILD_DEBUG=YES表示编译为DEBUG版本,如果为NO则为RELEASE。编译后的结果生成在C:\Users\John\project\CSSISD\Dependencies\GEOS\geos\src目录下。其中,geos.lib为静态库,geos.dll为动态库相应的导入库为geos_i.lib。另外还会生成_c的C语言版本库。

cURL的编译过程比较复杂,要借助perl环境进行。如果需要支持OpenSSL等特性还需要依赖于其他库。详细的编译过程可以参照INSTALL.W32。如果要编译openssl,可参照网站:http://blog.csdn.net/flyliying/article/details/6138300 中的相关介绍。编译完成之后同样需要替换OSG第三方库中的相同文件。本文直接下载了编译好的libcurl,并且如果libsasl.dll不存在的话还需要另外下载,最后在运行时可能会提示找不到该文件。

zLib的编译较为简单,在其目录中的contrib\vstudio目录下已经有VS9和VS10的工程文件。但是不要急于编译,否则会发现提示缺少文件。建议认真阅读该目录下的readme说明文件:
首先,需要执行contrib\masmx86目录中的bld_ml32.bat,生成编译所必需的文件,然后加载工程文件进行编译。结果为zlibwapi.lib(dll)。将其替换OSG第三方库中的zlib.lib(dll)早期版本。需要特别注意的是:(本人忽略了这一步导致osgEarth中的kmz插件始终无法编译通过!!!)在使用zlib的工程中,需要定义宏 ZLIB_WINAPI(可以在工程设置中的preprocessor definitions中加入)

Minizip包含在zLib中(见contrib\minizip),而Libzip在windows下编译可能需要安装cygwin环境,因此此处直接下载了编译好的库文件了事。

完成了上述依赖库的编译之后,就可以对osg进行编译了(osgEarth是基于osg的)。可以直接参照Readme说明文件,利用CMake进行配置,生成编译的工程文件。如果对CMake不熟也不要紧:使用图形界面的CMake,将osg的目录设置为source,将osg\build目录设置为输入目录,然后勾选Advance和Group,Configure。结束后将显示为红色(需要的)库文件的目录一一设置正确,再次Configure,直到正确为止。然后Generate,就会成功了。下面使用VS对生成的工程进行编译(大约4个小时)。

最后,对osgEarth编译。同样采用Cmake生成项目文件,配置过程与OSG类似,需要注意的几点如下:
其中OSG_GEN_INCLUDE需要设置为OSG原始代码中的include,OSG_INCLUDE需要设置为生成的代码中的include,即osg\build\include(其中只有config.h)。这个令人费解的设置可能是makelist中的bug?
另外,需要将OSG_VER_EXE设置为OSG编译后生成的osgversiond.exe。之后的编译应该就没有什么大问题了。

最后,补充说明一下,OSG中头文件是基于“c++规范”的,因此没有h后缀。为了在IDE中支持该类头文件,可以参照osg中的说明文件:VisualStudio_Syntax_Highlighting.txt,在vs中简单设置一下就可以了。

Good Luck!

补充说明:
如果osgearth在运行中发现有osg的plugin无法找到,那么就是osg编译的问题。
1 在cmake配置osg的过程中,需要注意每一项的定义,大部分包含在第三方库中,但是需要将其正确定义。
2 ZLIB库启用的宏ZLIB_WINAPI需要定义,定义的方法可以在CMAKE中添加,也可以在工程中直接增加(使用zlib的库不是很多)。
3 如果出现了LNK4098错误,则是由于链接的文件的运行时库不同。可以检查是否将DEBUGE和RELEASE库配置错误,或者直接编译最新的库代替3rdParty中的库,例如libpng。
4 GDAL编译的过程中需要注意的是如果选择批量编译Debug和Release,之后的编译结果会覆盖之前的结果,所以要分别编译并手动改名。
5 osg中jpeg插件中的boolean问题,编译了最新的libjpeg8d库后解决(编译过程见该库目录中install文件最后关于vs2010的介绍)。另外,如果发现osg中的Tiff插件无法读取图像,同样需要下载最新的libtiff进行编译,方法与libjpeg类似(十分不信任osg第三方预编译库!)。

转载于:https://www.cnblogs.com/johnzjq/archive/2012/03/26/2418755.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值