標籤:style blog http color 使用 os 檔案 2014
使用MinGW靜態編譯Assimp
到了5月份了,沒有寫一篇日誌,於是自己從知識庫裡面拿出一篇文章充數吧。這次將要解說怎樣在Windows下使用MinGW靜態編譯Assimp。
Assimp是眼下比較全的3D格式解析庫了,熟悉3D遊戲開發的同行都知道,3D的格式非常混亂,各種3D格式在不同場合都有他們特定的應用,遊戲引擎僅僅可以解析少部分3D格式,很多其它有用的格式來自遊戲公司自己定義的格式。而在開源領域,Assimp算是比較全的3D格式匯入庫了。它對3D格式理解深入,非常適合整合至3D圖形引擎中,讓你們的程式支援很多其它3D的格式。
要靜態編譯Assimp,首先須要準備Assimp的原始碼、cmake和MinGW。MinGW我選用的是Qt內建的庫,大家能夠自己選擇合適的MinGW或是TDM-MinGW。這裡我將Assimp的原始碼和cmake分享一下,以便自己日後查閱。
Assimp:這裡(提取碼:60c5)
Cmake的:這裡(提取碼:46ac)
下載Assimp後,解壓之,放在合適的位置,我這裡放在E:/Develop中。
同一時候下載cmake後,解壓之,放在合適的位置。我這裡放在E:/Develop中。
然後cmd進入命令列,我們主要在命令列進行編譯。
1、 首先環境變數設定,我這裡是這麼設定的:
set path=%path%;E:/Develop/cmake-2.8.12.1-win32-x86/bin;E:/Develop/Qt5.3/Tools/mingw482_32/bin
2、然後到assimp庫的根資料夾下
cd $${Assimp檔案夾}
3、使用cmake進行構建
cmake -G "MinGW Makefiles" ^-DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON ^-DCMAKE_RC_COMPILER=E:/Develop/Qt5.3/Tools/mingw482_32/bin/windres.exe ^-DCMAKE_MAKE_PROGRAM=E:/Develop/Qt5.3/Tools/mingw482_32/bin/mingw32-make.exe ^-DCMAKE_LFLAGS=-static ^-DCMAKE_LFLAGS_DLL=-static ^-DDX9_INCLUDE_PATH=E:/Develop/Qt5.3/Tools/mingw482_32/i686-w64-mingw32/include ^-DD3D9_LIBRARY=E:/Develop/Qt5.3/Tools/mingw482_32/i686-w64-mingw32/lib/libd3d9.a ^-DD3DX9_LIBRARY=E:/Develop/Qt5.3/Tools/mingw482_32/i686-w64-mingw32/lib/libd3dx9.a .
假設你的電腦安裝了DirectX庫,那麼cmake會尋找標頭檔以及庫檔案,不必設定DX9_INCLUDE_PATH、D3D9_LIBRARY和D3DX9_LIBRARY。
4、在mingw32-make之前,改動一下源碼。由於編譯會出現錯誤:
在$${Assimp檔案夾}/include/assimp/types.h中改動:
在52行後加入#include <string.h>,即可了。
5、改動$${Assimp檔案夾}/tools/assimp_view/CMakeFiles/assimp_viewer.dir/build.make中418行,刪除$(RC_FLAGS);改動$${Assimp檔案夾}/tools/assimp_cmd/CMakeFiles/assimp_cmd.dir/build.make中的58行,刪除$(RC_FLAGS)
6、mingw32-make -j 4進行構建。假設順利的話,libassimp.a以及assimp_cmd.exe和assimp_viewer.exe都會順利地構建。
最後假設想要使用assimp_cmd.exe和assimp_viewer.exe的話,須要libgcc_s_dw2-1.dll、libstdc++-6.dll以及libwinpthread-1.dll,這些都能夠在MinGW檔案夾中找到,想要使用assimp_viewer的話還須要有d3dx9_43.dll。當然,我這裡也分享了一份assimp_viewer,在這裡。