我正在寫一個基於OpenGL的遊戲。它只包括這兩個庫:glew,glfw3。爲了運行它,用戶顯然必須安裝OpenGL,這個假設我想繞過。 我已經收集了遊戲目錄中的所有合適的二進制文件,並試圖在本地鏈接到這些庫,但編譯器聲明瞭對其所有函數的未定義引用。我做錯了什麼或者是不可能的?我使用的是Windows,但由於相同的原因,它在Linux上失敗。在沒有安裝的情況下運行OpenGL?
0
A
回答
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.a
和libGLFW.a
添加到要鏈接的源文件/編譯單元列表中。
+0
感謝您提供全面的信息。 –
相關問題
- 1. 在沒有安裝python的情況下在Linux上運行python
- 2. 在沒有安裝VS的情況下運行msbuild
- 3. 在沒有安裝jre的情況下運行java?
- 4. 在沒有安裝Robot的情況下運行Rational Robot腳本
- 5. 在沒有安裝的情況下使用php運行phantomjs
- 6. 如何在沒有安靜標誌的情況下運行軟件包安裝
- 7. 在沒有安裝文件的情況下安裝程序
- 8. 在沒有OpenGL的情況下複製OpenGL正投影行爲
- 9. 有沒有辦法在不安裝Eclipse的情況下運行selenium Java腳本?
- 10. 在沒有包裝的情況下在QT上使用OpenGL
- 11. 在沒有NuGet的情況下在Visual Studio上安裝測試運行器
- 12. 有沒有辦法使Installshield 2015安裝程序始終在沒有命令行的情況下運行安靜?
- 13. 如何在沒有實際安裝的gem的情況下運行`bundle outdated`?
- 14. 在沒有安裝Xcode的情況下運行Xcode應用程序
- 15. 我可以在沒有安裝python的情況下運行apache storm嗎?
- 16. 在沒有管理員權限的情況下運行安裝程序
- 17. 在沒有再次運行構建的情況下安裝構建工件
- 18. 如何在沒有iTunes的情況下在iPhone上安裝IPA
- 19. 在沒有安裝graphlab的情況下在SFrame中分組
- 20. 在沒有maria-db的情況下在CentOS 7中安裝postfix
- 21. 在沒有YUM的情況下在Centos上安裝MongoDB
- 22. Intellij如何在未安裝任何JRE的情況下運行?
- 23. 在不安裝Eclipse的情況下運行RCP應用程序
- 24. 如何在不安裝的情況下運行SASS?
- 25. 在未安裝VB6的情況下運行VB6應用程序
- 26. 如何在沒有安裝程序的情況下在Windows中安裝SML/NJ?
- 27. 在沒有下載的情況下在ftp上運行jarfile
- 28. 在沒有用戶交互的情況下安裝EXE
- 29. 是否可以在沒有appstore的情況下安裝IOS APP?
- 30. 如何在沒有Composer的情況下安裝ZF2組件
這是不是很清楚你在問什麼。你當然可以靜態鏈接glew和glfw。但是你不能爲真正的opengl庫做這些,因爲用戶需要使用與他們的硬件相匹配的不同實現。 – derhass
所有包含在二進制文件中的實現是否不同? 我的問題是,我做錯了什麼?我必須鏈接到哪些確切的圖書館? –
您似乎對OpenGL實際上是什麼感到困惑; glew和GLFW只是一些幫助程序庫,它們不是OpenGL的一部分。 – derhass