如何获得GL库/标题?


Answers:


81

视窗

在Windows上,您需要包含gl.hOpenGL 1.1支持的标头并链接到OpenGL32.lib。两者都是Windows SDK的一部分。此外,您可能需要以下标头,这些标头可以从http://www.opengl.org/registry获得。

  • <GL/glext.h> -OpenGL 1.2及更高版本的兼容性配置文件和扩展接口。
  • <GL/glcorearb.h>-OpenGL核心配置文件和ARB扩展接口,如OpenGL 4.3规范的附录G.2中所述。不包括仅在兼容性配置文件中找到的接口。
  • <GL/glxext.h> -GLX 1.3及更高版本的API和GLX扩展接口。
  • <GL/wglext.h> -WGL扩展接口。

的Linux

在Linux上,您需要链接libGL.so,它通常是libGL.so.1的符号链接,而libGL.so.1却是实际的库/驱动程序的符号链接,后者是图形驱动程序的一部分。例如,在我的系统上,实际的驱动程序库名为libGL.so.256.53,这是我使用的nvidia驱动程序的版本号。您还需要包括gl.h标头,该标头通常是Mesa或Xorg软件包的一部分。同样,你可能需要glext.hglxext.hhttp://www.opengl.org/registryglxext.h拥有GLX扩展名,等同wglext.h于Windows。

如果要使用OpenGL 3.x或OpenGL 4.x功能而不使用已移至GL_ARB_compatibility扩展名中的功能,请使用gl3.h注册表网页中的新标头。它gl.h也替换并且glext.h(只要您只需要核心功能)。

最后但并非最不重要的glaux.h一点是,它不是与OpenGL相关联的标头。我认为您已经阅读了可怕的NEHE教程,并随手进行了。Glaux是一个非常过时的Win32库(1996),用于加载未压缩的位图。使用更好的东西,例如libPNG,它也支持alpha通道。


2
注意:上面的Windows SDK版本是Windows7。只需检查Windows SDK的最新版本(现在是8.1,很快就会是10)。检查文档的向后和向前兼容性。
Elika Kohen

3
MacOS呢?
JanČerný18年

在Windows 7 64位系统,由于某种原因,我不明,包括gl.hglu.h不工作,只包括windows.h
Ivanzinho

43

Debian Linux(例如Ubuntu)

sudo apt-get update
OpenGL: sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev

视窗

找到您的Visual Studio文件夹,在其中放置库以及头文件,下载lib文件并将其复制到lib文件夹,并将头文件复制到头。然后将dll文件复制到system32。然后您的代码将100%运行。

另外视窗:对于那些包括你只需要下载glut32.libglut.hglut32.dll


22
debian / ubuntu / other衍生物!= linux
CoatedMoose 2014年

1
这个答案是10岁,但仍然对我有所帮助(Ubuntu LTS)。
Waldir Leoncio

@CoatedMoose只是不说什么不是,我们不需要知道什么不是,您能否有一天能说出它实际上是什么?
伊万津尼奥(Ivanzinho)

7

在Visual Studio中:

//OpenGL
#pragma comment(lib, "opengl32")
#pragma comment(lib, "glu32")
#include <gl/gl.h>
#include <gl/glu.h>

标头位于SDK中:C:\ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ Include \ gl


5

什么操作系统?

在Ubuntu上,我有

$ dpkg -S /usr/include/GL/gl.h 
mesa-common-dev: /usr/include/GL/gl.h
$ 

但a)大小写和b)前/后斜杠的区别不大。您的示例在使用反斜杠时可能是错误的。


2

如果您使用的是Windows,则它们将与平台SDK(或Visual Studio)一起安装。但是,头文件仅与OpenGL 1.1兼容。您需要为更高版本的新功能创建功能指针。您能否说明您要使用的OpenGL版本。


0

上面关于Linux的一些答案要么不完整,要么完全错误。

例如,/ usr / include / GL / gl.h不是mesa-common-dev的一部分,或者已经存在很多年了。

无论如何,对于最新的答案,这两个软件包很重要:

https://mesa.freedesktop.org/archive/mesa-20.1.2.tar.xz

ftp://ftp.freedesktop.org/pub/mesa/glu/glu-9.0.1.tar.xz

glu.h是glu本身的一部分:

GL/glu.h
GL/glu_mangle.h

台面明显更大。我想它的头是个位变量,我想这取决于给介子的标志,但是通常应该包括这些标志:

KHR/khrplatform.h                                                                                                         
EGL/eglplatform.h                                                                                                         
EGL/eglext.h                                                                                                              
EGL/eglextchromium.h                                                                                                      
EGL/eglmesaext.h                                                                                                          
EGL/egl.h                                                                                                                 
vulkan/vulkan_intel.h
gbm.h
GLES3/gl31.h
GLES3/gl3ext.h
GLES3/gl3.h
GLES3/gl32.h
GLES3/gl3platform.h
xa_composite.h
xa_tracker.h
xa_context.h
GLES2/gl2.h
GLES2/gl2platform.h
GLES2/gl2ext.h
GLES/gl.h
GLES/glplatform.h
GLES/glext.h
GLES/egl.h
GL/gl.h
GL/glx.h
GL/osmesa.h
GL/internal
GL/internal/dri_interface.h
GL/glcorearb.h
GL/glxext.h
GL/glext.h

希望以后能帮助任何人找到答案的问题;例如,由于SDL opengl,编译dosbox需要此功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.