2012-07-17 82 views
1

我一直在閱讀OpenGL遊戲的跨平臺開發。我們正在研究開發一款遊戲,Linux用戶也可以使用它。然而,我卻遇到了一些我不太感興趣的東西。便攜式Linux與OpenGL/Mesa3D兼容的可執行文件

如何創建一個可移植的linux可執行文件?特別是如何讓各種不同版本的OpenGL/Mesa3D在一個(或多個)可執行文件中工作(我們不想分發源代碼)。

在Linux上的問題http://www.linuxquestions.org/questions/linux-software-2/hardware-acceleration-using-opengl-and-x11-876634/有人詳細介紹了Mesa3D/OpenGL是如何工作的,但是我很難看到的是如何在編譯的可執行文件中使用每個發行版的Mesa3D版本(甚至不知道它是否是可能)。

從我能告訴我需要動態鏈接在每個用戶機器上的應用程序的一部分,可能通過使用安裝程序?如果是這種情況,我們可以在運行時編譯程序並鏈接到Mesa3D/OpenGL,就像OpenGL的dll可以在Windows上執行的一樣嗎?

+2

您可以使用與'.dll'相似的共享對象('.so')。推薦的方法是預編譯用戶可以輕鬆安裝的「包」(即'.deb','.rpm')。這些軟件包可以聲明對其他軟件包的依賴關係,即特定版本的庫,然後將自動安裝。應該有大量的教程在那裏打包。 – amon 2012-07-17 20:06:03

+1

是的,你只需要鏈接到'libGL.so.1' – 2012-07-17 20:07:39

+0

保存你自己的麻煩,並使用[GLEW](http://glew.sourceforge.net/)。 – 2012-07-18 03:40:23

回答

1

只需將您的可執行文件動態地鏈接到libGL.so並完成它。它的二進制接口在OpenGL的所有實現中都很常見。

從我能告訴我需要動態鏈接在每個用戶機器上的應用程序的一部分,可能通過使用安裝程序?

不是你做鏈接,也不是安裝程序。動態鏈接在加載可執行文件時自動發生。動態鏈接是DLL在Windows中的裝入方式以及* nix上的* nix副本對象SharedObject(.so)。

在構建程序時,將選項-lGL添加到鏈接器命令行中,它將爲可執行文件添加動態鏈接條目libGL.so。那你可以重新分配。當程序在目標系統上啓動時,動態鏈接器將定位libGL.so並加載它。