2014-03-30 142 views
0

我正在寫一個基於OpenGL的遊戲。它只包括這兩個庫:glew,glfw3。爲了運行它,用戶顯然必須安裝OpenGL,這個假設我想繞過。 我已經收集了遊戲目錄中的所有合適的二進制文件,並試圖在本地鏈接到這些庫,但編譯器聲明瞭對其所有函數的未定義引用。我做錯了什麼或者是不可能的?我使用的是Windows,但由於相同的原因,它在Linux上失敗。在沒有安裝的情況下運行OpenGL?

+0

這是不是很清楚你在問什麼。你當然可以靜態鏈接glew和glfw。但是你不能爲真正的opengl庫做這些,因爲用戶需要使用與他們的硬件相匹配的不同實現。 – derhass

+0

所有包含在二進制文件中的實現是否不同? 我的問題是,我做錯了什麼?我必須鏈接到哪些確切的圖書館? –

+0

您似乎對OpenGL實際上是什麼感到困惑; glew和GLFW只是一些幫助程序庫,它們不是OpenGL的一部分。 – derhass

回答

1

OpenGL不是您安裝的庫,它是作爲驅動程序的一部分實現的API。您的編譯器抱怨未解決的符號與最終用戶計算機上的情況完全無關。就你而言,這聽起來似乎沒有告訴編譯器/鏈接器哪些庫和API接口要鏈接到你的程序二進制文件中;因此你的編譯器會抱怨,有些內部引用不能解決。

所以這裏是:OpenGL不是你隨程序一起提供的,它是圖形驅動程序的一部分,你的程序必須使用用戶機器上安裝的任何OpenGL版本。爲此,您可以通過傳遞編譯器鏈接器選項-lGL動態鏈接到libGL.so

GLEW是一個輔助庫,它動態後加載OpenGL ABI中找不到的所有OpenGL函數,因此不會通過公共符號表libGL.so導出。而是使用glXGetProcAddress動態加載 - 這是一個相當乏味的任務。請注意,當涉及到OpenGL-3和後來的核心配置文件時,GLEW存在一些嚴重問題。

GLFW是一個簡單的框架庫,用於設置具有OpenGL上下文的窗口。

GLEW和GLFW可以安全地將靜態地鏈接到您的程序,我建議您這樣做。替代使用-l…標誌,請將libGLEW.alibGLFW.a添加到要鏈接的源文件/編譯單元列表中。

+0

感謝您提供全面的信息。 –

相關問題