編譯環境
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項目遇到了這個問題。搜了一下stackoverflow發現,是微軟的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 即可。