在不安装的情况下运行 OpenGL?
Posted
技术标签:
【中文标题】在不安装的情况下运行 OpenGL?【英文标题】:Running OpenGL without installing? 【发布时间】:2014-03-30 14:38:26 【问题描述】:我正在编写一个基于 OpenGL 的游戏。它只包括这两个库:glew、glfw3。为了运行它,用户显然必须安装 OpenGL,这是我想绕过的假设。 我已经在游戏目录中收集了所有适当的二进制文件,并尝试在本地链接到这些库,但编译器声称对其所有函数的未定义引用。我做错了什么还是不可能?我使用的是 Windows,但出于同样的原因,它在 Linux 上失败了。
【问题讨论】:
不清楚你在问什么。您当然可以静态链接 glew 和 glfw。但是对于真正的 opengl 库,您不能这样做,因为用户需要使用与其硬件匹配的不同实现。 二进制文件中不是都包含不同的实现吗?我的问题是,我做错了什么?我必须链接到哪些确切的库? 你似乎对OpenGL到底是什么感到困惑; glew 和 GLFW 只是一些帮助库,它们不是 OpenGL 的一部分。 【参考方案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.a
和libGLFW.a
添加到要链接的源文件/编译单元列表中。
【讨论】:
以上是关于在不安装的情况下运行 OpenGL?的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL ES 在不使用 glPixelStorei 的情况下更新纹理的子部分
OpenGL 实践——在没有核心版本的情况下运行 OpenGL