首页 > 解决方案 > 现代 OpenGL 和 GLEW Libraray 的编译错误

问题描述

我正在尝试使用 glew,但在编译时我不断收到错误消息。我正在运行 Ubuntu 并有一个 Nvidia 显卡。我已经使用apt安装了glew。编译时出现错误:

g++ -c main.cpp && g++ main.o -o main -lGL -lGLU -lglfw -lglut

这是我的代码:

#include <GLFW/glfw3.h>
#include <GL/glew.h>
#include <stdlib.h> 
#include <stdio.h>
#include <iostream>

using namespace std;

static void error_callback(int error, const char* description)
{
    fputs(description, stderr);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}
int main(void)
{
    GLFWwindow* window;
    glfwSetErrorCallback(error_callback);
    if (!glfwInit())
        exit(EXIT_FAILURE);

    window = glfwCreateWindow(1336, 768, "Simple example", NULL, NULL);
    glfwMakeContextCurrent(window);


    glfwSetKeyCallback(window, key_callback);
    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glBegin(GL_TRIANGLES);
        glVertex2f(-0.5f,-0.5f);
        glVertex2f( 0.0f, 0.5f);
        glVertex2f( 0.5f,-0.5f);
        glEnd();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}

这是我的错误信息

´´´
/usr/include/GL/glew.h:85:2: error: #error gl.h included before glew.h
   85 | #error gl.h included before glew.h
      |  ^~~~~
/usr/include/GL/glew.h:97:2: error: #error glext.h included before glew.h
   97 | #error glext.h included before glew.h
      |  ^~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15756:28: error: conflicting declaration ‘typedef void (* PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum, GLfloat*)’
15756 | typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12301:25: note: previous declaration as ‘typedef void (* PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum, const GLfloat*)’
12301 | typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15758:28: error: conflicting declaration ‘typedef void (* PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum, GLint*)’
15758 | typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12303:25: note: previous declaration as ‘typedef void (* PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum, const GLint*)’
12303 | typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15760:28: error: conflicting declaration ‘typedef void (* PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum, GLenum, GLfloat*)’
15760 | typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12297:25: note: previous declaration as ‘typedef void (* PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum, GLenum, const GLfloat*)’
12297 | typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15762:28: error: conflicting declaration ‘typedef void (* PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum, GLenum, GLint*)’
15762 | typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12299:25: note: previous declaration as ‘typedef void (* PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum, GLenum, const GLint*)’
12299 | typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15769:28: error: conflicting declaration ‘typedef void (* PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum, GLenum, const GLfloat*)’
15769 | typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12310:25: note: previous declaration as ‘typedef void (* PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum, GLenum, GLfloat*)’
12310 | typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:15770:28: error: conflicting declaration ‘typedef void (* PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum, GLenum, const GLint*)’
15770 | typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data);
      |                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GL/gl.h:2050,
                 from /usr/include/GLFW/glfw3.h:210,
                 from main.cpp:2:
/usr/include/GL/glext.h:12311:25: note: previous declaration as ‘typedef void (* PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum, GLenum, GLint*)’
12311 | typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from main.cpp:3:
/usr/include/GL/glew.h:16433:17: error: ‘PFNGLCLIENTACTIVETEXTUREPROC’ does not name a type; did you mean ‘PFNGLCLIENTACTIVETEXTUREARBPROC’?
16433 | GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCLIENTACTIVETEXTUREARBPROC
/usr/include/GL/glew.h:16441:17: error: ‘PFNGLLOADTRANSPOSEMATRIXDPROC’ does not name a type; did you mean ‘PFNGLLOADTRANSPOSEMATRIXDARBPROC’?
16441 | GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLLOADTRANSPOSEMATRIXDARBPROC
/usr/include/GL/glew.h:16442:17: error: ‘PFNGLLOADTRANSPOSEMATRIXFPROC’ does not name a type; did you mean ‘PFNGLLOADTRANSPOSEMATRIXFARBPROC’?
16442 | GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLLOADTRANSPOSEMATRIXFARBPROC
/usr/include/GL/glew.h:16443:17: error: ‘PFNGLMULTTRANSPOSEMATRIXDPROC’ does not name a type; did you mean ‘PFNGLMULTTRANSPOSEMATRIXDARBPROC’?
16443 | GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTTRANSPOSEMATRIXDARBPROC
/usr/include/GL/glew.h:16444:17: error: ‘PFNGLMULTTRANSPOSEMATRIXFPROC’ does not name a type; did you mean ‘PFNGLMULTTRANSPOSEMATRIXFARBPROC’?
16444 | GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTTRANSPOSEMATRIXFARBPROC
/usr/include/GL/glew.h:16445:17: error: ‘PFNGLMULTITEXCOORD1DPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16445 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16446:17: error: ‘PFNGLMULTITEXCOORD1DVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD1HNVPROC’?
16446 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD1HNVPROC
/usr/include/GL/glew.h:16447:17: error: ‘PFNGLMULTITEXCOORD1FPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16447 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16448:17: error: ‘PFNGLMULTITEXCOORD1FVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD1HNVPROC’?
16448 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD1HNVPROC
/usr/include/GL/glew.h:16449:17: error: ‘PFNGLMULTITEXCOORD1IPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16449 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16450:17: error: ‘PFNGLMULTITEXCOORD1IVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD1HNVPROC’?
16450 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD1HNVPROC
/usr/include/GL/glew.h:16451:17: error: ‘PFNGLMULTITEXCOORD1SPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16451 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16452:17: error: ‘PFNGLMULTITEXCOORD1SVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD1HNVPROC’?
16452 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD1HNVPROC
/usr/include/GL/glew.h:16453:17: error: ‘PFNGLMULTITEXCOORD2DPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16453 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16454:17: error: ‘PFNGLMULTITEXCOORD2DVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD2HNVPROC’?
16454 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD2HNVPROC
/usr/include/GL/glew.h:16455:17: error: ‘PFNGLMULTITEXCOORD2FPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16455 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16456:17: error: ‘PFNGLMULTITEXCOORD2FVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD2HNVPROC’?
16456 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD2HNVPROC
/usr/include/GL/glew.h:16457:17: error: ‘PFNGLMULTITEXCOORD2IPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16457 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16458:17: error: ‘PFNGLMULTITEXCOORD2IVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD2HNVPROC’?
16458 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD2HNVPROC
/usr/include/GL/glew.h:16459:17: error: ‘PFNGLMULTITEXCOORD2SPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16459 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16460:17: error: ‘PFNGLMULTITEXCOORD2SVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD2HNVPROC’?
16460 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD2HNVPROC
/usr/include/GL/glew.h:16461:17: error: ‘PFNGLMULTITEXCOORD3DPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16461 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16462:17: error: ‘PFNGLMULTITEXCOORD3DVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD3HNVPROC’?
16462 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD3HNVPROC
/usr/include/GL/glew.h:16463:17: error: ‘PFNGLMULTITEXCOORD3FPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16463 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16464:17: error: ‘PFNGLMULTITEXCOORD3FVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD3HNVPROC’?
16464 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD3HNVPROC
/usr/include/GL/glew.h:16465:17: error: ‘PFNGLMULTITEXCOORD3IPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16465 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16466:17: error: ‘PFNGLMULTITEXCOORD3IVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD3HNVPROC’?
16466 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD3HNVPROC
/usr/include/GL/glew.h:16467:17: error: ‘PFNGLMULTITEXCOORD3SPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16467 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16468:17: error: ‘PFNGLMULTITEXCOORD3SVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD3HNVPROC’?
16468 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD3HNVPROC
/usr/include/GL/glew.h:16469:17: error: ‘PFNGLMULTITEXCOORD4DPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16469 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16470:17: error: ‘PFNGLMULTITEXCOORD4DVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16470 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16471:17: error: ‘PFNGLMULTITEXCOORD4FPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16471 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16472:17: error: ‘PFNGLMULTITEXCOORD4FVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16472 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16473:17: error: ‘PFNGLMULTITEXCOORD4IPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16473 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16474:17: error: ‘PFNGLMULTITEXCOORD4IVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16474 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16475:17: error: ‘PFNGLMULTITEXCOORD4SPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16475 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:16476:17: error: ‘PFNGLMULTITEXCOORD4SVPROC’ does not name a type; did you mean ‘PFNGLMULTITEXCOORD4XPROC’?
16476 | GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLMULTITEXCOORD4XPROC
/usr/include/GL/glew.h:17107:17: error: ‘PFNGLCOLORSUBTABLEPROC’ does not name a type; did you mean ‘PFNGLCOLORSUBTABLEEXTPROC’?
17107 | GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable;
      |                 ^~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOLORSUBTABLEEXTPROC
/usr/include/GL/glew.h:17108:17: error: ‘PFNGLCOLORTABLEPROC’ does not name a type; did you mean ‘PFNGLCOLORTABLESGIPROC’?
17108 | GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable;
      |                 ^~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOLORTABLESGIPROC
/usr/include/GL/glew.h:17109:17: error: ‘PFNGLCOLORTABLEPARAMETERFVPROC’ does not name a type; did you mean ‘PFNGLCOLORTABLEPARAMETERFVSGIPROC’?
17109 | GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOLORTABLEPARAMETERFVSGIPROC
/usr/include/GL/glew.h:17110:17: error: ‘PFNGLCOLORTABLEPARAMETERIVPROC’ does not name a type; did you mean ‘PFNGLCOLORTABLEPARAMETERIVSGIPROC’?
17110 | GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOLORTABLEPARAMETERIVSGIPROC
/usr/include/GL/glew.h:17111:17: error: ‘PFNGLCONVOLUTIONFILTER1DPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONFILTER1DEXTPROC’?
17111 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONFILTER1DEXTPROC
/usr/include/GL/glew.h:17112:17: error: ‘PFNGLCONVOLUTIONFILTER2DPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONFILTER2DEXTPROC’?
17112 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONFILTER2DEXTPROC
/usr/include/GL/glew.h:17113:17: error: ‘PFNGLCONVOLUTIONPARAMETERFPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONPARAMETERFEXTPROC’?
17113 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONPARAMETERFEXTPROC
/usr/include/GL/glew.h:17114:17: error: ‘PFNGLCONVOLUTIONPARAMETERFVPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONPARAMETERFVEXTPROC’?
17114 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONPARAMETERFVEXTPROC
/usr/include/GL/glew.h:17115:17: error: ‘PFNGLCONVOLUTIONPARAMETERIPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONPARAMETERIEXTPROC’?
17115 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONPARAMETERIEXTPROC
/usr/include/GL/glew.h:17116:17: error: ‘PFNGLCONVOLUTIONPARAMETERIVPROC’ does not name a type; did you mean ‘PFNGLCONVOLUTIONPARAMETERIVEXTPROC’?
17116 | GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCONVOLUTIONPARAMETERIVEXTPROC
/usr/include/GL/glew.h:17117:17: error: ‘PFNGLCOPYCOLORSUBTABLEPROC’ does not name a type; did you mean ‘PFNGLCOPYCOLORSUBTABLEEXTPROC’?
17117 | GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOPYCOLORSUBTABLEEXTPROC
/usr/include/GL/glew.h:17118:17: error: ‘PFNGLCOPYCOLORTABLEPROC’ does not name a type; did you mean ‘PFNGLCOPYCOLORTABLESGIPROC’?
17118 | GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOPYCOLORTABLESGIPROC
/usr/include/GL/glew.h:17119:17: error: ‘PFNGLCOPYCONVOLUTIONFILTER1DPROC’ does not name a type; did you mean ‘PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC’?
17119 | GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC
/usr/include/GL/glew.h:17120:17: error: ‘PFNGLCOPYCONVOLUTIONFILTER2DPROC’ does not name a type; did you mean ‘PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC’?
17120 | GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC
/usr/include/GL/glew.h:17121:17: error: ‘PFNGLGETCOLORTABLEPROC’ does not name a type; did you mean ‘PFNGLGETNCOLORTABLEPROC’?
17121 | GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable;
      |                 ^~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETNCOLORTABLEPROC
/usr/include/GL/glew.h:17122:17: error: ‘PFNGLGETCOLORTABLEPARAMETERFVPROC’ does not name a type; did you mean ‘PFNGLGETCOLORTABLEPARAMETERFVSGIPROC’?
17122 | GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETCOLORTABLEPARAMETERFVSGIPROC
/usr/include/GL/glew.h:17123:17: error: ‘PFNGLGETCOLORTABLEPARAMETERIVPROC’ does not name a type; did you mean ‘PFNGLGETCOLORTABLEPARAMETERIVSGIPROC’?
17123 | GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETCOLORTABLEPARAMETERIVSGIPROC
/usr/include/GL/glew.h:17124:17: error: ‘PFNGLGETCONVOLUTIONFILTERPROC’ does not name a type; did you mean ‘PFNGLGETNCONVOLUTIONFILTERPROC’?
17124 | GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETNCONVOLUTIONFILTERPROC
/usr/include/GL/glew.h:17125:17: error: ‘PFNGLGETCONVOLUTIONPARAMETERFVPROC’ does not name a type; did you mean ‘PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC’?
17125 | GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC
/usr/include/GL/glew.h:17126:17: error: ‘PFNGLGETCONVOLUTIONPARAMETERIVPROC’ does not name a type; did you mean ‘PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC’?
17126 | GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC
/usr/include/GL/glew.h:17127:17: error: ‘PFNGLGETHISTOGRAMPROC’ does not name a type; did you mean ‘PFNGLGETNHISTOGRAMPROC’?
17127 | GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram;
      |                 ^~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETNHISTOGRAMPROC
/usr/include/GL/glew.h:17128:17: error: ‘PFNGLGETHISTOGRAMPARAMETERFVPROC’ does not name a type; did you mean ‘PFNGLGETHISTOGRAMPARAMETERFVEXTPROC’?
17128 | GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETHISTOGRAMPARAMETERFVEXTPROC
/usr/include/GL/glew.h:17129:17: error: ‘PFNGLGETHISTOGRAMPARAMETERIVPROC’ does not name a type; did you mean ‘PFNGLGETHISTOGRAMPARAMETERIVEXTPROC’?
17129 | GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv;
      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                 PFNGLGETHISTOGRAMPARAMETERIVEXTPROC

´´´

还有一些类似的错误,但堆栈溢出不允许我发布超过 30000 个字符。

标签: c++openglglfwglew

解决方案


阅读您的错误信息

/usr/include/GL/glew.h:85:2: error: #error gl.h included before glew.h

产生非常相关的信息。glew.h必须在之前包含(或在最好的情况下,而不是旧的GL.h),并且glfw3.h将包含GL.h(默认情况下,至少,您可以设置一些预处理器宏来更改该行为,有关详细信息,请参阅GLFW 构建指南)。简而言之:总是在所有其他可能与 GL 相关的内容之前包含您的 GL 加载程序的标题:

#include <GL/glew.h>
#include <GLFW/glfw3.h>

此外,您缺少glewInit实际加载这些 OpenGL 函数指针的调用。

最后:

    glBegin(GL_TRIANGLES);
    glVertex2f(-0.5f,-0.5f);
    glVertex2f( 0.0f, 0.5f);
    glVertex2f( 0.5f,-0.5f);
    glEnd();

这不是现代的 OpenGL - 恰恰相反:这是你可能拥有的最古老和最过时的 OpenGL 用法。这种即时模式的东西从 1992 年的 GL 1.0 开始就在那里,最终在 OpenGL 3.0 中被弃用(2008 年),并从 OpenGL 3.2 核心配置文件中完全删除(自 2009 年以来)。


推荐阅读