MAC OSX10.9 下编译使用OGRE1.9及CEGUI 0.8.3(二)OGRE Templates的使用

来源:互联网 发布:关于数据爆炸 编辑:程序博客网 时间:2024/06/04 06:01

MAC OSX10.9 下编译使用OGRE1.9及CEGUI 0.8.3(二)OGRE Templates的使用

    前文说了OGRE依赖库的编译原理,本来接下来的工作应该是编译OGRE库及CEGUI的库,但因工作原因一直没有时间整理,今天难得空闲就先记录一下OGRE官方模板的使用吧,至于OGRE库和CEGUI库的编译基本上跟依赖库的编译差不多,用CMAKE配置好各个依赖库的文件及相应的属性---生成工程文件--Xcode打开工程文件,配置编译平台与最低兼容平台都为10.9编译为64位等等--然后先ALL BUILD---最后INSTALL,在工程文件夹下即可生成SDK文件夹。官网上有详细的说明,耐着性子看一看即可,主要是Xcode配置一定要正确。可以参考wiki的文章。如下:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Building+Ogre

    今天说说OGRE官方模板的使用。OGRE Templates 是论坛上大神提供的一个官方模板,通过它我们可以方便的在Xcode上建立OGRE程序,只不过论坛上只有Xcode4+Ogre1.8可以使用的模板,升级Xcode5后出现了各种问题。在这里记录一下:

环境依然是OSx10.9+Xcode5+OGRE1.9

1:首先下载OGRE Templates的安装程序。我是在论坛下的,但是找不到当时的地址了,附上我网盘自己收藏的,需要的拿走。http://pan.baidu.com/s/1o659YVS

2:安装很简单,双击--下一步,下一步即可,跟装其他程序没什么区别。有一个群里的朋友反应Xcode5装这个模板会提示错误,不过我没有遇到,如果大家遇到可以google一下。

3:运行Xcode5 ,新建一个工程。Create a new Xcode project

4:左边IOS跟Xcode平台里面各有一个OGRE的选项,如果没有重新安装一下Templates试试。我们选择OSX平台里的模板,然后下一步

5:工程名自己输,如果不是在APP Store 发布的话其他的不用写。

下一步,选择一个保存位置。选择Create即可

6:同样,配置开发平台为10.9,

Build setting里面也一样

7:然后我们需要指定OGRE SDK的位置,在编译OGRE源码时选择Install编译后自动生成一个SDK文件夹,把它拷贝到一个英文目录下,然后将前文提到的OGRE依赖库同样拷贝到这个SDK文件夹下。记下SDK文件夹的完整路径。

8:Ogre模板里面其实已经配置好了各个头文件需要的路径,只不过是相对路径,另外1.9的SDK跟1.8也有所不同,具体配置步骤如下:

  ①首先我们需要添加一个名称为OGRE_SDK_ROOT的用户参数。如图:选择Add User-Defined Setting

然后在下面会自动生成一个属性,单击就可以重命名,然后配置属性值为刚才SDK文件夹所在的路径。如图:

②然后我们来编译一下,看看结果如何?

  首先会提示找不到boost的相关头文件

这个简单,吧boost的相关头文件在的目录加到Header search Path 里面就OK。但这个地方需要注意,这个模板里包含头文件时已经加了boost的前缀了,所以我们只需要修改属性到boost的第一层目录下即可,不要直接指定到头文件所在的文件夹,如图:

看到上面的OGRE_SDK_ROOT了么,我们之前配置的那个用户属性就是给这里用的,在这里组成一个完整的路径供Xcode使用,所以当你哪个头文件找不到的时候仔细研究一下这里,当时这个boost包含的时候我就没仔细看前面已经有boost的前缀了,以至于浪费了好长好长时间。。。。。

③OK,配置好boost在的文件夹后再编译一下 看看新的错误:仍然是头文件找不到:

对于这些头文件,我都从SDK那个文件夹里找到,直接把绝对路径复制过来,大家也可以选择使用模板属性里那种OGRE_SDK_ROOT的模式,但我比较懒。我最后的路径是这样的:

加一个路径就重新编译一次,直到不提示找不到头文件的错误。一定要仔细再仔细,我因为大小写的问题浪费了好多时间。

9:OK,头文件路径设置完,再次编译,你会遇到一个新的错误:

/Users/LiHang/Project/GUI/GUI/OgreFramework.cpp:145:19: No matching constructor for initialization of 'OgreBites::SdkTrayManager'双击错误,跳到出问题的地方来看一下:

这个错误的主要原因是OgreBites::SdkTrayManager()这个构造函数不存在,因为1.9里面已经不用这个函数了。我从网上搜索的解决办法是这样的:

http://blog.csdn.net/niteip/article/details/13169755


其实这个函数这么改也不对,而且这个函数是OGRE自带的GUI系统,因为我需要使用CEGUI作为GUI系统,这个地方实际可以直接删掉,后文会详述,此处就先这么改吧。

10:继续编译,然后继续出现错误,如图。不要气馁,我开始编译的时候遇到过各种奇葩错误,没有中文资料,只能一点一点的看英文,习惯了都。

这个错误是Xcode很经典的一个错误,我当时为了解决这个错误浪费了整整2周的时间,不要笑话我,我每天只能挤时间来研究。不说废话,我们继续:

造成这个

(null): Linker command failed with exit code 1 (use -v to see invocation)错误的原因主要是没有相应的运行库,这种情况一般出现在你调用了别的库,Xcode能正确的找到头文件,但是运行库文件找不到。造成这种情况我主要犯过一下两个错误

第一是你调用的库文件跟当前平台不兼容,比如你现在编译的是32位软件,但是你使用的是64位的库,等等类似的情况,解决的办法就是自己编译所有的库,然后属性都配置的一样。主要是这里要配置的一样:Architectures等等,因为我其他的库都是64位,所以这个地方也选择仅仅64位如图:


第二个原因就是你的库编译对了,但xcode找不到。我们现在遇到的就是这个问题。解决也很简单,首先我们打开OGRE SDK文件夹看看里面的库文件:

库文件在SDK/lib/debug/Debug里面,全都是framework的形式,这是苹果一个很好的引用别的库的方式,你无需考虑库文件到底在哪,只需要吧这些framework导入到系统里就可以了。更详细的知识在此不介绍。导入的步骤如下:

点那个加号,添加进去就可以。不仅仅是OGRE库,所有的Frame形式的库都是这么用。这里都加进来吧,我懒得一个一个添加。

然后再次编译。

然后是找不到OIS库,吧依赖库里的OIS.lib加进来就行,跟OGREframework一样,同样的还有boost的库。

10:再次编译,这样终于就编译成功了。运行,可以得到以下界面:

说明OGRE初始化完成,真正点OK进去的时候,会发现这样的错误:

这个错误真的很烦人,我同样花了好长时间来解决。原因如下:

OGRE1.9的SdkTrayManager较1.8有较大的变化,因为我用不到,所以没有研究,详情可以看一下OGRE的doc,里面有详细的用法。我的解决方案是直接把相关的函数注释掉。

然后下面还有一个

OK把这两个地方注释掉,其他的地方就木有太大问题了,OGRE算是正常运行。

建议大家使用OGRE Templates之前,一定要编译好OGRESDK,然后运行里面的例子看看,例子正常运行了,然后再来使用Templates建立自己的程序,否则整个过程会耗费大量的时间。OK,睡觉!

0 0