編譯Assimp傻瓜教程


assimp的編譯過程和搭建OpenGL環境時glfw的編譯基本相同,建議先閱讀環境搭建

下載源碼

這里使用的是3.3.1版本,Github下載assimp源碼

解壓完你會得到

接下來我們要編譯這些源碼

為什么要在自己機器上編譯?因為從源代碼編譯庫可以保證生成的庫是兼容你的操作系統和CPU的,而預編譯的二進制文件可能會出現兼容問題(甚至有時候沒提供支持你系統的文件)

但是提供源代碼所產生的一個問題在於不是每個人都用相同的IDE開發程序,因而源碼提供的工程/解決方案文件可能和一些IDE不兼容,人們只能從.c/.cpp和.h/.hpp文件來自己建立工程/解決方案,這是一項枯燥的工作,但因此也誕生了一個叫做CMake的工具

CMake

CMake是一個工程文件生成工具 http://www.cmake.org/cmake/resources/software.html

我們可以使用預定義好的CMake腳本,根據自己的選擇(像是Visual Studio, Code::Blocks, Eclipse)生成不同IDE的工程文件。這個工具就能讓我們從GLFW源碼里創建一個Visual Studio 2017工程文件,之后就能順利編譯

CMake需要一個源代碼目錄和一個存放編譯結果的目標文件目錄,源代碼目錄我們選擇下載的assimp的源代碼的根目錄,然后我們在assimp下直接新建一個 build 文件夾作為目標目錄

在設置完目錄之后,點擊Configure(設置)按鈕,讓CMake讀取設置和源代碼。我們接下來需要選擇工程的生成器,這里我選擇 Visual Studio 2017 (根據自己的IDE版本設定)CMake會顯示可選的編譯選項用來配置最終生成的庫

這里我們使用默認設置,並再次點擊Configure(設置)按鈕保存設置,保存之后,點擊Generate(生成)按鈕,生成的工程文件會在你的build文件夾中,生成完之后我們就可以點Open Project,用你的IDE打開

注意,CMake在讀取配置列表時,可能會報出DirectX庫丟失的錯誤,報錯如下:

Could not locate DirectX
CMake Error at cmake-modules/FindPkgMacros.cmake:110 (message):
Required library DirectX not found! Install the library (including dev packages) 
and try again. If the library is already installed, set the missing variables 
manually in cmake.

這個問題的解決方案是安裝DirectX SDK

安裝DirectX SDK時,可能遇到一個錯誤碼為s1023的錯誤,這種情況下,請在安裝SDK之前根據這個先卸載C++ Redistributable package(s)

編譯

在因為CMake已經配置好了項目,所以我們直接點擊 Build Solution(生成解決方案) 按鈕

img

導入工程

接下來你需要讓IDE知道庫和頭文件的位置,這里有兩種方法:

  1. 找到IDE或者編譯器的/lib/include文件夾,添加GLFW的include文件夾里的文件到IDE的/include文件夾里去。用類似的方法,將glfw3.lib添加到/lib文件夾里去。雖然這樣能工作,但這不是推薦的方式,因為這樣會讓你很難去管理庫和include文件,而且重新安裝IDE或編譯器可能會導致這些文件丟失
  2. 建立一個新的目錄包含所有的第三方庫文件和頭文件,並且在你的IDE或編譯器中指定這些文件夾,再OpenGL的項目中,我使用一個單獨的文件夾,里面包含LibsInclude文件夾,在這里存放OpenGL工程用到的所有第三方庫和頭文件,這樣我的所有第三方庫都在同一個位置(並且可以共享至多台設備),當然,這要求你每次新建一個工程時都需要告訴IDE/編譯器在哪能找到這些目錄

和glfw的導入一樣,這里推薦第二種方法,接下來我們先把生成的庫文件和頭文件導入工程,並且告訴IDE/編譯器在哪能找到他們的目錄

庫文件

我們打開build目錄,生成的庫文件就在 build\code\Debug 路徑下,我們需要的是下面這兩個文件

將.lib文件復制到你要用到assimp的工程目錄下的庫目錄,這里我放到了OpenGL學習項目下的,glfw3.lib所在的文件夾里,路徑為 FirstOpenGL\Libraries\Lib,這樣我就不必重新設定庫目錄

將.dll動態鏈接庫放在工程目錄下

編譯出的靜態庫其實里面只有定義,真正實現還是要去動態庫去找,所以當你把它們放進項目配置里時,編譯是通過的,但是動態庫並不會打進程序里,所以你得把動態庫放到項目工程目錄下,也就是其實你需要把靜態庫放進項目配置中,而動態庫放在項目目錄中

頭文件

assimp用到的頭文件在我們build文件夾的同級目錄include下,路徑為assimp-3.3.1\include\assimp,我這里直接將assimp文件夾復制到我工程的Include目錄

接下來我們打開工程屬性,再配置一番

設置引用目錄和庫目錄,由於我放的就是之前使用的目錄,這里不必更改

連接器部分則需要把assimp加上

嘗試include我們導入的頭文件

沒有報錯,OK大功告成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM