標籤:cmake assimp
使用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,在這裡。