2013年10月18日 星期五

在新電腦上面跑Ogre+Mingw與Bullet

買了這麼一台功能強大的新電腦,自然下一步就是要做的
就是自己想要做的事:
「寫計畫很久的程式,不論是Android還是PC上面的。」
在PC上面我需要用到Ogre與Bullet。
所以編譯他們,是測試這台電腦效能與實現計畫的第一步。
只是在使用最新的Mingw(GCC 4.8.1-4)去編譯時,
卡死在Bullet上,這邊做個記錄。



首先,新電腦當然是什麼都沒有的狀態
所以下載使用新的Mingw是第一步
這邊建議沒有經驗的使用者,使用Mingw-Get時,把所有的套件都選一選吧
頂多就是不要選MSYS就好
本來我只有選擇Base Setup裡的mingw32-base與mingw32-gcc-g++
結果使用cmake時,一下說我少了libgmp-10.dll
一下又說沒有libiconv-2.dll
然後windows的api也沒有裝...
所以還是全裝最穩

再來是編譯Ogre 1.8.1的部分
新的OgreDeps要編譯不難,但要使用在Ogre上還是要自己手動處理一下
把標頭檔(.h)放到include裡,
還有靜態函式庫要放到lib裡依release與debug排開
這樣cmake才會抓得到東西
不過cmake選mingw時,不知為何debug都出不來
如果單純要跑Release範例其實這問題也還好,要解決應該也不困難。
要編訪mingw的Debug時,CMAKE_BUILD_TYPE要輸入Debug後,
再重新configure一次,與Generate出新的Makefile
無法像Visual Studio一樣,可以使用分號隔開設定(Debug;Release;Relwithdebinfo)
然後,注意!把OgreDeps放到Ogre裡時,並不表示cmake就可以很輕鬆地抓到路徑
應該說,路徑根本就一團亂,很多都是顯示NOTFOUND
並沒有指定到OgreDeps的位置

從CG、FreeImage、Freetype到zlib與zzip的路徑(include與lib),請全部重新再檢查
有發現錯亂或找不到時再指定一次,
之後再執行configure一次,因為zlib要找到include路徑(檔案),才有辦法使用zzip
同樣指定完成後,再執行configure一次,確定沒有新的參數
這才保證不會出亂子
不然應該會像我第一次編譯出來,是不能用的東西
我還以為mingw不能跑在windwos 8的系統上咧
另外CG的部分請選擇32位元的lib與dll,官方mingw還是32位元的編譯器
還有,zziplib中的stdint.h請刪掉,這會造成某些變數重複定義
會有編譯Ogre不過的問題

另外補充一下,如果要使用boost的話,請下載1.50.0以後的版本,
不然cmake(gcc 4.8.1)會找不到,不知道為什麼
而我是選了1.51.0的版,原因是cmake裡的設定最高是這個版本,
當然它應該也相容於更高的版本,不過我不敢嘗試。

接著就是漫長的等待編譯完成
之前筆電是第二代i5的話,大概要等上半天約3~4個小時左右
這次換上第四代i7果然有比較快,約1個小時不到,就編譯完成
望著這飛快的速度,有感受到那4萬的價值了。

Ogre完成,接著就是Bullet的編譯
然後使用cmake設定完,一使用mingw32-make沒多久就出現cc1plus.exe異常的訊息
用整筆錯誤訊息上網查,也查不太到什麼消息,最後是以:
"bullet"與"internal compiler error segmentation fault gcc"查到應該是GCC 4.8.1的問題
https://code.google.com/p/android/issues/detail?id=58916
今天再用舊的筆電,跑XP系統的再RUN一次,也出現了同樣的訊息...
看來必需要降GCC版本到4.7看看
不然,就乾脆使用微軟的Visual Studio Express應該問題會少一點吧
這部分確定沒問題了,使用Visual Studio Express 2012是OK的
看來暫時不要用mingw開發了

沒有留言: