3

我缺少 opengl32 库(更多详细信息:mingw32 w64 missing OpenGL32 lib)。我有几个与这个库有关的问题:

  1. 为什么我需要 opengl32 静态库(我有 .dll)?
  2. 为什么显卡厂商不提供这个库?
  3. 谁应该提供?
  4. 有opengl32库的源代码吗?
  5. 如果有 opengl32,为什么我需要 GLEW 或其他 GL 库实现(以使用 OpenGL 的所有功能)?为什么 opengl32 不能拥有所有必需的 GL 实现?
4

2 回答 2

8

为什么我需要 opengl32 静态库(我有 .dll)?

它为链接器提供符号表。符号表告诉链接器库提供了哪些函数,以便链接器知道如何将程序中使用的符号与链接的库联系起来。

请注意,在 Windows 以外的其他操作系统上,“DLL”也提供符号表。

为什么显卡厂商不提供这个库?

因为库是驱动系统的操作系统接口的一部分

谁应该提供?

DLL:操作系统供应商。符号表库:编译器供应商。

有opengl32库的源代码吗?

OpenGL 本身只是一个规范。您在计算机上拥有的是一个实现和一个接口。该接口是操作系统的一部分。因此,在闭源操作系统上没有可用的源代码,但在开源操作系统上却有。

如果有 opengl32,为什么我需要 GLEW 或其他 GL 库实现(以使用 OpenGL 的所有功能)?

opengl32.dll 只是驱动系统的一个接口。该接口需要是 OpenGL 功能的最小公分母,以便可以通过一个通用接口提供广泛的 OpenGL 版本和功能。但是,您还希望能够访问存在扩展机制的更新和最前沿的功能。

为什么 opengl32 不能拥有所有必需的 GL 实现?

opengl32.dll 是操作系统的一部分,如果它是操作系统的一部分,那么每个新版本的 OpenGL 都需要更新操作系统。这实际上就是 MacOS X 的情况。

此外,OpenGL实现是驱动程序的一部分,而不是 DLL。

于 2012-09-12T17:33:20.330 回答
3
  1. 它不是静态库,而是动态链接到 DLL 的库。
  2. 因为它或多或少是操作系统的一部分。从 OpenGL32.dll 导出的符号往往是标准的(一组特定的gl...函数)和 Microsoft 特定wgl的(至少是一个)。众所周知的供应商之间没有差异。
  3. 微软确实提供了它,以及他们的编译器。任何其他编译器供应商也应该这样做,因为库可能在某种程度上是特定于编译器的。
  4. Mesa 是一个开源的 OpenGL 实现,所以你会得到最接近的。
  5. 你没有,你可以手动获取字符串和函数指针,这非常乏味。GLEW 等人为您完成了大部分功能检查和初始化。它们不能做任何你可以直接用 OpenGL32.dll 做的事情,但它们确实让生活变得更轻松。
于 2012-09-12T17:32:29.130 回答