由于最近工作的关系,开始研究Ogre,昨天晚上尝试搭配Ogre的开发框架,整理了一个晚上,到十一点多基本上是用CMake建立了Ogre.sln的工程文件,把机器放在那里编译然后回宿舍睡觉,今天早晨来实验室发现有错误:
15>..\..\..\Samples\Shadows\include\Shadows.h(98) : error C2872: 'vector' : ambiguous symbol
15> could be 'c:\program files (x86)\ogre\ogremain\include\OgrePrerequisites.h(468) : Ogre::vector'
15> or 'C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\vector(438) : std::vector'
网上说是因为重用了using namespace std;后来发现是因为在每一个出错的文件中都有使用using namespace Ogre,写代码的人的本意是使用Ogre命名空间中的vector,但是在代码中并没有体现,所以致使编译器在编译的时候无法确定到底是该使用哪个地方的vector,逐个寻找出错的地方,分别加上Ogre::,为其认为指定命名空间,然后编译正确,并且可以运行期OGRE的框架,同样的一段源代码,我在我的笔记本上进行编译的时候则没有发现很多的问题,因为从昨天晚上开始在台式机上操作过,对流程比较熟悉,在笔记本上又弄了一遍,但是运行的很顺利,同样的一份源代码,一次性编译通过,没有任何的错误。真是一个奇怪的地方,不知道为什么?不知哪位看到我的这篇文章的人可以给我解释一下,不胜感激!
下面将搭建Ogre框架的步骤整理如下:
(1) VS2008+SP1装好
(2) DirectX9c SDK装好 (不能只是运行时库,Ogre编译需要头文件 ),安装好的标记是环境变量中有一个DXSDK_DIR变量指向你选择的安装目录。安装好之后请把准备使用的VS2008关闭,否则环境变量不会更新,会导致以下(6)失败(更改环境变量值之后必须重新启动编译器,否则更改的环境变量不会起作用)。
(3) 安装CMake,下面地址为下载地址,似乎只有32位系统的,64位的则没找到:http://www.cmake.org/cmake/resources/software.html
(4) 解压缩ogre_src_v1-7-1.exe,重命名为Ogre(不重命名也无所谓,但是后面开发设定相对路径的时候看的会比较别扭)
(5) 解压缩OgreDependencies_MSVC_20100501.zip到Ogre目录下,需要将Dependencies和Ogremain两个目录并列放到同一个文件夹下
(6) 进入Ogre\Dependencies\src,运行vs2008的工程,编译(N多警告,不用管),建议debug和release版本都编译一遍,否则cmake的时候对应的ogre版本.sln无法正确生成,此时如果发现报错类似什么dinput.h找不到之类的,就是DXSDK没有装好,很多人不知道DXRumtime和DXSDK的区别,请仔细回看(2)。
昨天晚上在进行到这一步时遇到了很多的问题,浪费掉不少的时间,可能是一开始CMake安装的时候出现了问题,没有写到环境变量中,不得不将环境变量中一些没有用的东西删除,将安装的CMake加入,然后在Configure的时候编译器的选择出现了问题,提示我无法找到“bcc”(Borland C++ Complier),无法找到C++编译器,后来经过跟一个实验室同学的分析,觉得可能是找不到我为他指定的编译器,所以CMake在选择编译器的时候开始选用系统默认的bcc来进行,但是bcc无法运行正确,所以报错,换过编译器,并点击delete cache之后,CMake运行正常,Generate之后成功的生成了OGRE.sln。
(7) 保险起见,请关闭之前编译依赖库的VS2008,然后运行Cmake,选择好上面两个路径(Where is the source code / Where to build the binaries),建议都选择同一个目录,即(4)提到的Ogre目录,这样找起来方便,执行底部的configure(要选择编译器VS2008),第一次会有红色报错,再执行一次configure,红色变白色。
(8) Generate,一遍ok,退出CMake(没他什么事了,让人家休息吧)
(9) 去到Ogre目录下,可以看到OGRE.sln已经生成,运行,编译第一个工程ALL_BUID,看各人机器强悍程度,一般等上20分钟到1个小时左右。(Debug和Release版本的编译时间差不多,两个都编译的话建议放一个到睡觉前做,嘿嘿)
(10)设置Active Project为最底下的SampleBrowser,运行,ok。
(11)最后设置一个环境变量,命名为OGRESDK,值是Ogre的解压目录,建立Ogre框架就没有问题啦。
感谢在整个过程中实验室两位博士的帮忙,没有他们跟我一起分析和解决问题,相信到现在我还依然无法把框架搭好!