编译环境
OS: Windows 10
IDE: Visual Studio 2015 community
OGRE: https://bitbucket.org/sinbad/ogre/ branch 1.9
最初编译 OGRE 2.1 版本遇到问题
编译sdk并没有什么大问题,但是在cmake里选择编译Samples之后,编译就会报很多错误。检查了一下发现是Samples里的一些项目用的API还是旧的代码版本里的。比如:
Ogre::OverlaySystem 应该变为 Ogre::v1::OverlaySystem,
涉及到的文件有 Samples/Common/include/ 下的三个文件
- Sample.h
- SampleContext.h
- SdkSample.h
此外还有很多个Sample项目里面报了错误,为了避免一个个去改,我选择去编译1.9版本的Ogre的sdk和samples了。因为本来只是为了参考代码学习一下,所以没必要纠结于最新的版本。
需要注意的一些事
-
需要安装Direct3d的sdk,d3d9或者d3d11。如果没有安装的话,在cmake-gui里面需要取消勾选对应的选项:
不然等到编译的时候会报错说找不到对应的内容。
2. OgreMain项目需要设置命令行参数 /bigobj
直接Build可能会报错,因为生成的obj文件段数太多超过限制,为了扩大限制需要打开OgreMain项目的properties界面,在C/C++ -> Command Line 里面的Additional Options里加上 /bigobj。注意需要空格与其他选项分开。
3. Unresolved external symbol __vsnprintf … (in dxerr.lib)
我在Release编译时,RenderSystem_Direct3D9项目遇到了这个问题。搜了一下*发现,是微软的C runtime更新导致的不兼容,__vsnprintf 成了 _vsnprintf 之类的问题。相关的问题有:
- unresolved external symbol sprintf and sscanf in visual studio 2015
- unresolved external symbol vsnprintf in dxerr lib
我尝试了一下里面的解决方法,其中把 legacy_stdio_definitions.lib 加入RenderSystem_Direct3D9项目的Linker的Input里就可以了。
在Properties界面,Linker->Input界面的Additional Dependencies里加入 legacy_stdio_definitions.lib 即可。