【问题标题】:Running OpenGL without installing?在不安装的情况下运行 OpenGL?
【发布时间】:2014-03-30 14:38:26
【问题描述】:

我正在编写一个基于 OpenGL 的游戏。它只包括这两个库:glew、glfw3。为了运行它,用户显然必须安装 OpenGL,这是我想绕过的假设。 我已经在游戏目录中收集了所有适当的二进制文件,并尝试在本地链接到这些库,但编译器声称对其所有函数的未定义引用。我做错了什么还是不可能?我使用的是 Windows,但出于同样的原因,它在 Linux 上失败了。

【问题讨论】:

  • 不清楚你在问什么。您当然可以静态链接 glew 和 glfw。但是对于真正的 opengl 库,您不能这样做,因为用户需要使用与其硬件匹配的不同实现。
  • 二进制文件中不是都包含不同的实现吗?我的问题是,我做错了什么?我必须链接到哪些确切的库?
  • 你似乎对OpenGL到底是什么感到困惑; glew 和 GLFW 只是一些帮助库,它们不是 OpenGL 的一部分。

标签: c++ opengl makefile


【解决方案1】:

OpenGL 不是您安装的库,它是作为驱动程序的一部分实现的 API。您的编译器抱怨符号无法解析与最终用户计算机上的情况完全无关。在您的情况下,听起来您没有告诉编译器/链接器将哪些库和 API 接口链接到您的程序二进制文件中;因此,您的编译器抱怨说某些内部引用没有重新处理。

这里是这样:OpenGL 不是您的程序附带的东西,它是图形驱动程序的一部分,您的程序必须使用安装在用户计算机上的任何 OpenGL 版本。为此,您可以通过传递编译器链接器选项 -lGL 动态链接到 libGL.so

GLEW 是一个辅助库,它动态地后加载系统 OpenGL ABI 中没有的所有 OpenGL 函数,因此不会通过libGL.so 的公共符号表导出这些函数。而是使用glXGetProcAddress 动态加载它们——这是一项相当乏味的任务。请注意,GLEW 在涉及 OpenGL-3 及更高版本的 core 配置文件时存在一些严重问题。

GLFW 是一个简单的框架库,用于设置具有 OpenGL 上下文的窗口。

GLEW 和 GLFW 可以安全地将 静态 链接到您的程序,我建议您这样做。不要使用-l… 标志,而是将libGLEW.alibGLFW.a 添加到要链接的源文件/编译单元列表中。

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2018-11-03
    • 2011-05-09
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多