【问题标题】:Portable Linux Compiled Executable with OpenGL / Mesa3D使用 OpenGL / Mesa3D 编译的便携式 Linux 可执行文件
【发布时间】:2019-02-18 02:17:05
【问题描述】:

我一直在阅读有关使用 OpenGL 进行游戏的跨平台开发的文章。我们正在考虑开发一款可供 Linux 用户使用的游戏。然而,我遇到了一些我不太明白的事情。

如何创建可移植的 linux 可执行文件?具体来说,如何让各种不同版本的 OpenGL / Mesa3D 在一个(或多个)可执行文件中工作(我们不想分发源代码)。

关于 Linux 问题 http://www.linuxquestions.org/questions/linux-software-2/hardware-acceleration-using-opengl-and-x11-876634/ 有人详细介绍了 Mesa3D / OpenGL 的工作原理,但我很难看到我将如何在编译的可执行文件中使用每个发行版的 Mesa3D 版本(甚至不确定它是否是可能的)。

据我所知,我需要在每台用户机器上将应用程序的各个部分动态链接在一起,可能是通过使用安装程序?如果是这种情况,我们能否像 OpenGL 的 dll 在 Windows 上那样在运行时为 Mesa3D / OpenGL 部分编译程序和链接?

【问题讨论】:

  • 可以使用共享对象(.so),类似于.dlls。推荐的方法是预编译用户可以轻松安装的“包”(即.deb.rpm)。这些包可以声明对其他包的依赖关系,即库的特定版本,然后将自动安装。应该有大量的打包教程。
  • 是的,你只需要链接到libGL.so.1
  • 省去麻烦,使用GLEW
  • @BrettHale:GLEW 只管理扩展。 OP 正在询问 OpenGL 本身。
  • 这部分题也是对的!只是我无法将其标记为已回答!

标签: linux opengl executable mesa


【解决方案1】:

只需将您的可执行文件与libGL.so 动态链接即可。它的二进制接口在 OpenGL 的所有实现中都是通用的。

据我所知,我需要在每台用户机器上将应用程序的各个部分动态链接在一起,可能是通过使用安装程序?

不是您进行链接,安装程序也不是。加载可执行文件时会自动进行动态链接。动态链接是如何在 Windows 中加载 DLL 以及在 *nix 上加载 *nix 对应的共享对象 (.so)。

在构建程序时,将选项-lGL 添加到链接器命令行,它会将libGL.so 的动态链接条目添加到可执行文件。然后您可以重新分配。当程序在目标系统上启动时,动态链接器将定位 libGL.so 并加载它。

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2013-02-01
    • 2021-05-05
    • 2015-06-16
    相关资源
    最近更新 更多