C++ 运行OpenGL而不安装?

C++ 运行OpenGL而不安装?,c++,opengl,makefile,C++,Opengl,Makefile,我正在写一个基于OpenGL的游戏。它只包括这两个库:glew、glfw3。为了运行它,用户显然必须安装OpenGL,这是一个我想绕过的假设。 我在游戏目录中收集了所有适当的二进制文件,并尝试在本地链接到这些库,但编译器声称对它们的所有函数的引用都未定义。我是做错了什么还是根本不可能?我正在使用Windows,但它在Linux上失败的原因与此相同。OpenGL不是您安装的库,而是作为驱动程序一部分实现的API。编译器抱怨符号无法解析与最终用户计算机上的情况完全无关。在您的情况下,听起来您没有告诉

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

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

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

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

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


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

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