03/12
23:09
ios开发 IT OpenCV

ARSystem的移植

ARSystem是公司内部正在研发的AR算法。之前由实验室做VS版本的开发,现在由于工作需要,要将ARSystem移植到ios端。
首先这个系统拿到手,算是比较粗略的一个工程,工程里面有许多没有用到的文件需要剔除(如果不剔除会影响移植,毕竟依赖的库越少越好)。所以我就用到了《拓扑排序——移植的顺序》这篇文章的代码,对整个工程进行扫描,结果发现有一半以上的源码是没有用到的,大大降低了移植难度。
经过排查,剩下的源码所以依赖的库有两个,一个是Opencv,另一个是Ogre。
Opencv和Ogre在ios上面都有对应的SDK支持,本来是一件顺理成章的事情但是做起来却没有那么方便。首先Opencv的问题不是很大,毕竟之前一直在ios上用opencv做开发,问题就出在Ogre和Opencv的兼容上。
Opencv用的是libc++的标准库,但是Ogre在1.8版本以及以前,用的是libstdc++的库,这个库在逐渐被苹果淘汰。所以在不知情的情况下,一直在这两个库之间切换,也一直出现不同的错误。后来找到了一个解决办法是对编译器的标准库进行打补丁和重新编译,但是还是失败了。可能是出于相关方面的经验不是很多,而且本能上不想这么做因为这种解决办法已经在我的能力掌控范围之外。然后在搜索Google的时候无意中看到说Ogre1.9版本的SDK支持libc++和c++11,于是喜出望外,有种官方就是为了解决我这个问题的而出的1.9版本的感觉(自我YY一下)。
但是实际也并不是如同期望走得那么顺畅。首先需要查阅相关的安装SDK的资料,官方给出两种安装方式,一种是自己编译,要用到cmake,另一种是使用已经编译好的SDK。我想大多数人应该会选择已经编译好的SDK的,但是上网一搜,全是编译的方法,难道是第二种方法太简单了以至于没有人总结?我想1.9版本之前的问题应该不大的吧,但是1.9版本确实没有期望的顺利,这里大概讲一下流程(其实官方都有):
1. 下载已经编译好的SDK
2. 下载对应版本的dependencies,解压到SDK目录
3. 下载对应版本的 Ogre_Xcode4_Templates(和2在同一个文件夹),安装
4. 打开Xcode,创建ogre的模板工程,记得勾选libc++(为了解决上述问题)
但是在编译的时候会出各种错,解决到最后,剩下一个问题,就是不能支持ios8的设备(无法创建cfg文件,在win7下是有解决方法的,在xcode下面没有找到),我的环境是 OSX10.10,xcode6.2,ios8.1.3. 所以后来总结了一下,应该是模板的不兼容性导致的(这个可以随着官方的项目跟进来解决),然后采用了另一个模板(同事之前做的一个精简版),才能兼容了ios8.
到这里本应该结束的,但是又被一个小问题困扰了一小会,那就是在cpp和objc混编的环境下,要把m文件改成mm文件,不然会有不能使用标准库的报错。

发表评论