GLFW3:警告:函数'glGenBuffers'的隐式声明

时间:2017-01-14 22:41:11

标签: c opengl glfw

我正在使用glfw3使用opengl构建项目。该程序确实编译,它运行没有错误。但是我收到编译器警告,说明glGenBuffersglBindBufferglBufferDataglEnableVertexAttribArray等函数尚未声明。调查一下,这些函数都在<GL/glext.h>中声明(其中包含在gl.h中)

<GL/gl.h>中实际声明的函数正在编译,但没有警告,例如glEnableglClearglClearColor

编译(产生警告):

gcc -O0 -g3 -Wall -c -fmessage-length=0 -o main.o

链接(无警告):

gcc -o test main.o `pkg-config --static --libs glfw3`

1 个答案:

答案 0 :(得分:2)

您需要OpenGL loader,例如glLoadGen

大多数平台仅支持带有<GL/gl.h>标头的旧版OpenGL。在Windows上你获得OpenGL 1.1,使用Linux / Mesa可以获得OpenGL 1.3。这是由于动态链接在这些平台上的工作方式。如果您链接到较新版本的OpenGL中的某个函数,但在具有较旧版本OpenGL的系统上运行您的程序,则您的程序将无法运行。这可以通过强制人们动态加载OpenGL函数来解决。您可以使用wglGetProcAddressglXGetProcAddress或其他功能自行执行此操作,glext.h旨在帮助您执行此操作,但使用OpenGL加载程序更容易。

GLEW可能是最简单的选择,因为它可以通过大多数软件包管理器获得,但它在核心环境中无法正常工作。

(请注意,如果您只定位macOS / iOS,则可以使用弱链接,而不需要OpenGL加载器。)

此外,我建议使用-Werror或至少-Werror-implicit-function-declaration进行编译,这样可以避免意外获取隐式声明。