2012-07-17 31 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并加载它。