VS2015 配置opengl的一些庫


 opengl在windows下默認是很低的版本,需要自己更新驅動,驅動之中含有最新的函數。Opengl是一個協議,就是實現一些函數。對不同版本,在管程、渲染的方面有和你打的區別。這個要結合第一點。

1 實驗環境搭配

環境搭配具體做什么?下載庫,其實就是三個文件,動態庫文件,靜態庫文件和頭文件,把他們分別拷貝到某些目錄下即可,再去學習怎么在代碼中引用庫,靜態文件和#include頭文件類似,VS要加#pragma comment(lib,”path”)要引用外接靜態庫。嗯,就是醬紫。很簡單。

 

1.1 什么是動態庫,靜態庫?

動態庫:程序運行的時候加載,在編譯的時候用不着,放在C:\windows目錄下或.exe所在目錄的,哪個優先級更好就不知道了,我覺得是當前目錄容易,同一類文件放在比較近的地方,內存的就近原則

靜態庫: 編譯的時候要用到,比如你需要調用某個函數 ,有點像是頭文件,要重新編譯,所以對比動態庫編譯的時間會長一些。默認目錄是放在安裝VS\VC\lib目錄下。

頭文件:默認目錄是放在安裝VS\VC\lib目錄下。

以上三個庫的路徑都是可以指定的。具體是按VS-屬性-鏈接里的額外庫路徑。這里也可以添加庫。

靜態庫可以用#pragma comment(lib “path”); 這里不同庫之間若是有依賴順序很重要。

 

 

1.2 實例分析 VS2015 配置opengl的一些庫

(T T 第一次在VS配置,花了10+小時,學到的還是有的)

我的平台是VS2015,所謂環境配置就是將要引用的外界庫通過某種方式讓編譯器能知道你要用這個庫。然后是頭文件,opengl的操作很多封裝在庫里。

庫就是別人寫好的算法/功能,提供一個接口,就是函數頭給你,那么為什么你寫 。

網上下載一個庫,選擇平台后一般有兩種方式,源碼和帶編譯好的包。因為源碼下載下載后編譯,最終目的也是得到動態靜態庫。下面講怎么處理這兩個庫。

 

不同的庫之間的依賴,如果兩個庫之間有依賴,那么要統一同版本,比如release版本等,因為不同的發行版支持的函數是不同的

如果在代碼里寫了#pragma的順序,在屬性對話框又寫了另一種順序,我的電腦上會屬性對話框里的順序,這個是個好問題,?我猜是編譯器先編譯源程序然后再鏈接庫,但是如果還沒鏈接庫就編譯,會不會有未定義之類的行為,或者說二者是同時的,即include的思想,用到的時候去庫里找函數。

 

要安裝的庫:

支持高版本opengl的glew庫

對窗口狀態操作的glfw(可作為glut的替換,glut太舊,一直沒有更新)

矩陣等數學函數庫 glm,全都是頭文件,不用庫,很小巧

加載圖片 FreeImage

讀取不同格式的圖片數據 assimp ,這個庫的配置稍繁瑣了

 

具體做法見1.1,這里講代碼里怎么做?

代碼中#pragma common (lib , “path/.lib” ) 引用靜態庫。Include加頭文件。

 

聽起來很簡單的樣子。。。

 

可能出現的錯誤

 

# 文件目錄找不到,去加目錄

 

 #pragma common (lib , “glew32.lib” ) 需要引用動態庫,而glew32s.lib則不同。

 

 # 由於glew放在最前面,因為其他的函數庫可能會被替換/覆蓋,或者其庫文件中引用了glew庫的函數。可能出現undefine某個函數的錯誤代碼。

 

# __fun__@e2 函數未定義,重復定義,庫之間來關系,可以嘗試把順序呢調換一下

 

# 如果庫之間有依賴,目前我知道的只有兩種,重復定義函數變量的,這個兩個庫搞一起我,我覺得只能重新編譯吧,在文件里加一個條件編譯。第二是A庫里某個函數引用了B庫的函數,那么要先有B再引用A,我配置的問題這個出錯一大批,組合加邏輯啟發式檢查吧T T。

庫之間有依賴是非常糾結的問題了,編譯器報錯很多時候會出現不着邊際的提示,如果網上查得到庫之間有依賴,那還好,但是,有依賴也不給你搜索!因為庫是已經編譯好了,難查看,只是檢測。

 

重新編譯庫的例子

Assimp庫直接下載下來的是VS06 VS08的,如果是以上版本,.lib .dll是沒用的,見官網。

所以我們下載源碼編譯。以assimp-3.1.1為例。

需要下載的

-        assimp-3.1.1.zip包或git下來,打開后有include目錄的頭文件可以用。

-        DirectX SDK 下載,安裝

-        cmake ,assimp里一批的makefile。。

 

步驟:

  先安裝cmake,Direcx,解壓.zip得到assimp-3.1.1目錄

  打開cmake GUI (命令行也可以,教程見官網),將assimp-3.1.1添加進源目錄,生成結果你看着辦,最后我們生成的文件就在這里,我設置的是在assimp-3.1.1\output目錄,output是我剛創建的

  點擊開始confiure

 

   注意:有兩個主要會出現的,

一是找不到Directx,沒有安裝,裝上就好了。

     二是zlib可能會出問題,提示是makefilelist第四行project(zlib C)會將project。

zlib在contrib(第三方庫)目錄下,打開zlib,編輯makefilelist 將project(zlib C)替換成以下代碼。

 

cmake_policy(PUSH)

if(CMAKE_MAJOR_VERSION GREATER 2)

          cmake_policy(SET CMP0048 OLD)

endif()

project(zlib C)

cmake_policy(POP)

 

set(VERSION "1.2.8")


免責聲明!

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



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