折腾OSGEARTH心路历程

c/c++

浏览数:276

2019-3-28

写在前面

最近一周半的时间总结起来就几个字:折腾、折腾再折腾!!!
之前搞了一段时间的osg和osgearth,尤记得第一次配置osgEarth时的各种折腾,基于vs2010和cmake编译的32位版本的osg3.4和osgearth2.8(目前都是最新版本),前前后后弄了四天才搞完,当时就想,编译这一次以后再也不编译了!
可最近由于项目需要,boss说都用最新的吧,一路折腾过来,用了vs2010、vs2013、vs2015、vs2017几个平台几乎都编译了一遍,当然也包括osgEarhth的各种第三方库。每一个平台都能编译成功,但是运行之前自己的程序总是出现各种问题。

注:编译完成之后,用网上好多教程的测试方法测试成功并不能算是真正的编译成功,而应当基于自己项目需要,能够运行完美运行自己项目文件才算成功。
当然,一般针对osg的测试使用osgviewer osgversion osglogo(属于osgExample)+一个简单小程序测试,对osgEarth的测试一般是osgearth_viewer gdal_tiff.earth和osgviewer gdal_tiff.earth进行测试,这些能够测试成功的话,基本表示osg及osgEarth的编译没有太大问题,这时候就要拿自己的项目文件源码来测试,如果和之前或者看到过的显示结果有出入,那么恭喜,并没有完全安装成功。

折腾之路

之所以折腾,主要还在于64位osgEarth的编译过程。当然应该会有很多很多大牛应用vs2015完美编译64位的osg和osgearth,对此深表佩服,佩服的原因后续再说。

好吧,记录自己折腾过程中的几个关键点,以避免之后少走弯路。

折腾vs2013

vs2010现在可能用的比较少了吧,32位的osg和osgEarth(简称OE),能运行,64位的也能编译成功,但是并不完美。完不完美,主要看自己的需求了,编译过程不再详述。
用vs2013编译OE也能编译成功,但是编译osg中,freetype插件编译不成功,如果你对字体显示要求不高,当然可以忽略该插件。我们都知道,OSGEARTH编译需要基于osg,用vs2013编译完成OSGEARTH后,OSGEARTH的插件是基于osg的插件库安装在bin目录下,如下:
但是用vs2013编译出的tiff连接库在OSGEARTH中并不能起作用,出现http://bbs.osgchina.org/forum…,错误原因很可能是自己的tiff库出了问题(32位没问题),其他测试到时没什么问题,一旦出现此问题,两种解决方法:

  1. 重新生成tiff连接库,并将生成的dll覆盖掉原来的tiff.dll;
  2. 从cmake开始,重新编译OE。

如果方案一还是不能解决问题,只好采用方案2了。

折腾vs2015

vs2013有问题,好吧,老师说用用vs2015试试。
编译过程依然不在详述,只想说:非常不建议用vs2015编译OE。
最主要原因:osg官网并没有提供打包好的针对vs2015的第三方插件包。也就说说,要想编译osg,前提需要编译好自己所需要的或者将会需要的第三方插件,而且在编译过程中,cmake非常容易找不到freetype和freetype2(前提自己编译成功freetype)头文件和库文件。

折腾vs2017

用vs2017编译osg3.4,按照网上其他教程一般都能够编译成功,需要注意几点:

  1. cmake版本不要用最新版,但也不能用较低版本。低版本无法生成针对vs2017的解决方案,最新的cmake问题多多。我使用的cmake3.8.0.
  2. 在将cmakelists.txt拖入到cmake时,要特别注意配置的各项内容,仔细检查自己所需要的库是否都添加到路径中,一次次config,直到不出现错误为止。

编译gdal时候(必须):

找到gdal的源码文件下nmake.opt文件
修改nmake.opt文件内容(可用Notepad++打开),将其中的 前面的 “#” 去掉。
用管理员身份打开vs2017命令行工具:
分别执行

nmake -f makefile.vc machine=x64
nmake -f makefile.vc install machine=x64
nmake -f makefile.vc devinstall

编译成功之后会在C盘根目录产生:

然后将该目录下的bin、lib、include、data目录复制到你的安装路径下。

编译curl(必须)

过程类似于编译gadl:64-debug:

nmake /f Makefile.vc mode=static vc=15 debug=yes rtlibcfg=static machine=AMD64
nmake /f Makefile.vc mode=static vc=15 debug=no rtlibcfg=static machine=AMD64

编译成功后,会自动在curl的根目录下生成builds文件夹,其内容如图:

同样复制该目录下的头文件和库问价到你需要的安装路径之下。

编译expat

expat的作用不做过多解释,也并非OSGEARTH的必须依赖包。
expat的官方网站提提供了expat-win32bin-2.2.3.exe,然后双击安装,安装完成之后进入sources目录,双击打开expat.sln,如图:

打开之后将其编译平台改为x64,
然后生成expat库文件

经过上述步骤之后生成的库文件在 sources/win32下,如图

最后贴一下我所用到的OSGEARTH的第三方库:

另:自己详细书写了一份OSG和OSGEARTH的源码编译教程,相比于该手册(2011年编写)有比较大的改进,相应的第三方依赖库也是应用了较新的版本(截止2017-8-8日)和新的编译方法。网上大多数的编译过程还是针对32位OSGEARTH的,现在计算机硬件配置水平都很高,如果再继续使用32位版本开发项目未免有些浪费。
继:非常感谢上述文档(网上可以下载到)提供的帮助。