简介
这个是一篇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前,需要我们已经编译安装完OSG1
$ osgversion
如果能够看到OSG的版本,说明OSG编译成功
注意
Configure的时候,要注意OSG的相关库有没有找到
遇到的问题
- Gdal
这个是Gdal源码的一个错误,将某个类的析构函数声明为Protected类型。
我这边直接修改的Gdal的头文件,将Protected改为了Public类型
详见Github上的讨论。
github解决方案 - Cocoa例子编译失败
这个是OSG源码里面Cocoa的例子代码不对。
替换为最新版本的源码里面的例子即可 src/example/OSGviewerCocoa 替换这个文件夹,即可。