Sunday, November 09, 2008

Move to MinGW + Code::Blocks

常常看到網上的 Programmer 說道 M$ DLL Hell,雖然我對 DLL 一向都沒有好感,但總是沒有特別的機會體驗一下,終於在上星期遇到過了,情況就是我用 Ogng3D 做好的一個小遊戲,不能在其他電腦上執行,因為 M$ 的 VC Runtime DLL 問題,原因是 Ogng3D 是用 VC++ 2005 Express 製作的,其所用的 VC Runtime 是要超複雜的工序才可以 Deploy 的。

沒錯這個 DLL 問題是可以用 VC++ 2005 Pro 解決,我想要保持著「低成本」的原則,決不採用這個昂貴的方案,所以我便將注意力方在 MinGW + Code::Blocks 上。安裝 MinGW + Code::Blocks 不是件難事,因為 Code::Blocks 的裝件已經簡化了整個過程,下載回來執行安裝便可以。在這時候旅程才只是剛剛開始,我下載 OGRE3D 的 MinGW 的套件,安裝後發現裡面沒有 .a 檔案,初時以為要自己重新 Compile,但看看那些 Sample 後才發現,原來 MinGW 可以直接拿 DLL 來 Import 的。

安頓好 Code::Blocks、MinGW 及 OGRE3D 之後,當然就是要在 Code::Blocks 中 compile 我的 Ogng3D 了,過程也頗順利,沒有特別的問題便成功做好了 MinGW 版本的 Ogng3D,再將其用 PellesC 的工具 dump 出 LIB,嘗試用 PellesC 的遊戲程式 Link 來用,成功了!

在 Code::Blocks 上 Debug 絕對不是一件容易事,因為它用上了 GDB,試過了數次也不能成功啟動 Debugger,後來改動 Workspace 的架構和用較新版本的 GDB,才能夠成功在 GBD 中啟動 Ogng3D 來 Debug。就這樣,兩天的週末時間就沒了三分之二了。

後記:世上沒有免費午餐,免費的東西就要付出時間和努力,要駕馭 MinGW + Code::Blocks 也是一樣,同時 3rd Party 的 DLL 也多了,但總比其他電腦不能執行較好。雖然成功地建立了 MinGW 版本的 Ogng3D,VC++ Express 版本仍是會同步使用的,主要原因是因為 MilkShape3D 的 Plugin 是一定要用 VC++ 來製作的,這點比較可惜。

後記二:終於有機會在一部不能執行的那個小遊戲的電腦上試過了,遊戲成功啟動及運作,真的很感動,而且很高興有辦法逃離 M$ DLL Hell。(11-Nov-2008)