1. 程式人生 > >windows和ubuntu安裝opengl:glfw+glew+glm

windows和ubuntu安裝opengl:glfw+glew+glm

參考部落格:http://blog.csdn.net/u012552880/article/details/48040885

首先我們要知道三個庫glfw,glew,glm. 

glfw是輔助建立openGL視窗的開源庫.所以在後面配置工程的時候你會發現我們根本就不需要用到MFC視窗框架的,只需要console工程即可

glew是暴露openGL的通用API的開源庫,

glm是openGL開發中常用的數學庫,主要是一些矩陣變化. 但是這個庫是build-free的,也就是說把hpp檔案include進去就可以了,不需要lib和dll庫檔案。

一、win32

先講windows,我用的是vs2015,其實感覺不同版本的vs配置起來也沒啥差。先分別去官網下載glfw,glew和glm。 glfw和glew都可以下載他們編譯好的windows binary包,注意即使你的電腦是64位的,你也要下32位的,因為你的vs是32位的。然後步驟如下:

1,將glew32.dll、glfw3.dll複製到C:\WINDOWS\system32中,

2,將你下載到的glm包中的glm資料夾複製到vs2015安裝資料夾下的VC\Include中

    將你下載到的glew包中的GL資料夾複製到vs2015安裝資料夾下的VC\Include中

    將glfw包中的GLFW資料夾複製到vs2015安裝資料夾下的VC\Include中

3,將glew32.lib, glew32s.lib, glfw3.lib、glfw3dll.lib、opengl32.lib複製到vs201,5安裝資料夾下的VC\lib中。注意這個opengl32你可以到網上下載,或者你搜一下你的c盤,如果沒有,安裝一下windows SDK就有了,然後把它拷到lib目錄下。

4,  在vs2015中開啟專案屬性頁,在連結器→輸入→附加依賴項(Linker->Input->Additional Dependencies)中新增opengl32.lib;glew32.lib;glew32s.lib;glfw3.lib;glfw3dll.lib;

其實如果你不想拷貝這些檔案,直接把所需檔案加到依賴庫的路徑裡就可以了(流程見下面彩色部分). 注意寫程式時候,include "GL/glew.h" "GLFW/glfw3.h", "glm/glm.hpp" 這樣才不會報錯。

1. 新增編譯所需要(依賴)的 lib 檔案

    [解決方案資源管理器]“專案->屬性->配置屬性->聯結器->輸入->附加依賴項”(Linker->Input->Additional Dependencies

)裡填寫“winsock.lib”,多個 lib 以空格隔開。(等同於“#pragma comment(lib, "winsock.lib") ”語句)

2. 新增庫(Libs)檔案目錄

    方法 1:[解決方案資源管理器]“專案->屬性->配置屬性->聯結器->常規->附加庫目錄”
    方法 2:[選單]“工具->選項->專案和解決方案->C++ 目錄”,選擇對應平臺,然後新增所需“庫檔案”目錄

3. 新增包含(include)檔案目錄

    方法 1:[解決方案資源管理器]“專案->屬性->配置屬性->C/C++->常規->附加包含目錄”
    方法 2:[選單]“工具->選項->專案和解決方案->C++ 目錄”,選擇對應平臺,然後新增所需“包括檔案”目錄


二,win64

後來,我因為CGAL是64位的,沒辦法跟32位的opengl一起用,所以就重新安裝64的opengl。首先從官網下載了預編譯包,http://www.glfw.org/download.html,http://glew.sourceforge.net/,https://github.com/g-truc/glm/tags 。 首先我只知道glfw的是VS2015編譯的,glew不確定姑且先試一試。

我首先從window kit中把64位的opengl32.dll拷到vs14.0/vc/bin。然後把glew的bin,lib,include的資料夾拷了出來,放到opengl/glew資料夾下面。注意主要release版本64位的相應檔案。然後把glfw的bin,lib,include的資料夾放到opengl/glfw資料夾下面。然後又把glm資料夾直接放到opengl下面。然後把opengl/glew/bin, opengl/glew/bin放到系統變數的路徑裡。 配置vs工程的時候,將opengl/glew/include,opengl/glfw/include,opengl/glmf加入到additional dependecies。將opengl/glew/bin,opengl/glfw/lib ,opengl/glfw/bin, opengl/glfw/lib放到additional library directory。將opengl32.lib;glfw3.lib;glew32.lib加入到additional dependencies。 然後測試程式碼如下:

#include "stdafx.h"
#include "GL/glew.h"
#include "GLFW/glfw3.h"
#include "glm.hpp"
#pragma comment(lib, "legacy_stdio_definitions.lib")


int main(void)
{
GLFWwindow* window;


/* Initialize the library */
if (!glfwInit())
return -1;


/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
glfwTerminate();
return 0;
}

但是我遇到了glfw3.lib遇到了很多LNK2019的error,我試了所有的方法都不管用。最後發現是因為我把系統預設連結的lib都刪掉了,kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;我把這些庫都放進去之後,error就全沒了。

三,linux

再講linux,我因為沒有用ide寫程式,官網上下了glfw和glew,自個先看官網的instruction分別安裝一下,木有任何難度。關鍵就在於,剛開始寫opengl程式,你連結的時候,一堆依賴庫真是難搞,你要是用g++或者gcc編譯的話,依賴庫要寫一長串,你要是每次用g++煩,就用cmake編譯,寫一個cmakelist一勞永逸,下面是我的cmakelist:

project(glfw_test)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_C_FLAGS "-frounding-math")
set(CMAKE_CXX_FLAGS "-frounding-math")
aux_source_directory(. SRCS)
add_executable(glfw_test ${SRCS})
target_link_libraries(glfw_test glfw3 X11 Xrandr Xi Xinerama Xxf86vm Xcursor GL GLEW pthread dl)

依賴庫的次序搞錯都經常報錯,這個次序是我試了很多遍的,應該沒有問題了。

我後來又鼓搗了下用在linux用code::block, 步驟如下:

1, setting->compiler->linker setting裡把要用的庫和依賴庫(glfw3 X11 Xrandr Xi Xinerama Xxf86vm Xcursor GL GLEW pthread dl)全都加進去.

2,setting->compiler->search directories->compiler裡把user/local/include加進去

3,setting->compiler->search directories->linker裡把user/local/lib加進去

然後就可以啦