MacOS编译OSG&OSGEarth

简介

这个是一篇MacOS上编译OSG和OSGEarth的实践文章。
我之前编译过Windows7 Vs2010的32位和64位,Android armv7、Ubuntu14.04上的OpenSceneGraph(OSG)和OSGEarth库。
后来换了笔记本,把MacOS的版本一起编译了,补全了常见的Android、IOS、Windows、Linux、MacOS各个操作系统编译实践。

文章分为一下几部分

  • 环境介绍
  • OSG和OSGEarth的编译过程
  • 过程中遇到的一些问题和解决方法

电脑环境和代码版本

  • 环境
操作系统 MacOS 10.12.4
Xcode 8.3
Homebrew 1.1.11
CMake 3.7.1
  • 代码版本
OSG 3.4.0
OSGEarth 2.9.0 DEVELOPMENT

编译步骤

OSG编译

步骤一:

CMake源码,生成生成本平台能够编译的项目
说明:CMake的作用是将源码生成当前操作系统的编译器能够编译的文件,如:VS平台的VS2010工程、Linux平台的Makefile文件、Mac上的Xcode项目等。
配置路径
选择源码与项目生成目录,在3处选择生成的项目类型(我比较熟悉Makefile,一下以Makefile为例),当然如果你熟悉CodeBlocks、Xcode、Eclipse等,也可以生成相应的项目文件。


步骤二:

生成
选择好项目之后,点击Done,会出现图中红色部分。
点击Configure,CMake会根据CMakefileList.txt来查找对应源码的路径、第三方库的路径,如果没有错误,点击Generate生成对应的Makefile文件。

如果出错

这时候会有一个Error的弹窗,我们注意看下方的提示,往上找。看哪个必须的库没有找到。
一般来说这个是因为你系统里面没有这个库(可能是电脑没有库、也可能是库没有加到环境变量下)
如果是第一种,我们使用Homebrew这个软件安装就可以。
如:我们缺少gdal库。

1
brew install gdal

安装完成之后,我们再次Configure,直到没有Error。

注意

Configure需要多次操作,直到我们把需要的库都找对。

CMAKE_BUILD_TYPE Release
BUILD_OSG_EXAMPLES 勾上
BUILD_DOCUMENTATION 勾上

步骤三:
编译

1
2
$ cd /Users/whisperchi/recent/OSG/OpenSceneGraph-3.4.0/ReleaseBuild
$ make -j 8

如果编译过程中不出错,安装即可

1
$ sudo make install

如果编译出错
首先我们要对编译过程有个了解,大致会遇到一下几类错误:
找不到头文件: 缺少对应库的开发包

1
$ brew install xxxx-dev

找不到实现: 没有该库

1
$ brew install xxx

语法错误: 这个可能是因为电脑上的库太久或者太新、接口在这些库升级之后已经变了。

OSGEarth编译

与OSG编译类似,注意:编译OSGEarth前,需要我们已经编译安装完OSG

1
$ osgversion

如果能够看到OSG的版本,说明OSG编译成功
注意
Configure的时候,要注意OSG的相关库有没有找到

遇到的问题

  1. Gdal
    这个是Gdal源码的一个错误,将某个类的析构函数声明为Protected类型。
    我这边直接修改的Gdal的头文件,将Protected改为了Public类型
    详见Github上的讨论。
    github解决方案
  2. Cocoa例子编译失败
    这个是OSG源码里面Cocoa的例子代码不对。
    替换为最新版本的源码里面的例子即可 src/example/OSGviewerCocoa 替换这个文件夹,即可。