【问题标题】:glbinding, Qt and error "glbinding is not compatible with gl.h"glbinding、Qt 和错误“glbinding 与 gl.h 不兼容”
【发布时间】:2016-09-01 21:15:23
【问题描述】:

我正在编写一个新项目,并想用 glbinding 替换 GLEW。

我的设置是这样的: VS 2015,Qt 5.6,glbinding 2.0

我尝试编译非常简单的代码 - 只有窗口 (QWindow) 与 OpenGL 上下文 (QOpenGLContext) 但收到错误:glbinding 与 gl.h 不兼容

当我跟踪这个错误时,我发现该文件(由 glbinding/gl/gl.h 导入)nogl.h 导致了这个消息下面的代码:

#ifdef __gl_h_
    #error "glbinding is not compatible with gl.h"
#else
    #define __gl_h_
#endif

然后我注意到这是由 QtGui/qopenglcontext.h 标头引起的(我需要它来创建 OpenGL 上下文...)。所以当我不包括 qopenglcontext.h 我的程序编译没有错误。我还注意到,仅当我包含 glbinding/gl/gl.h after QtGui/qopenglcontext.h 时才会出现此错误消息。如果我颠倒包含顺序,我会收到一堆这样的错误:

1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(117): error C2065: 'GLenum': undeclared identifier
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(117): error C2146: syntax error: missing ')' before identifier 'mode'
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(118): error C2065: 'GLenum': undeclared identifier
1>C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtGui/qopenglext.h(118): error C2146: syntax error: missing ')' before identifier 'target'

毕竟我仍然不知道如何解决这个问题以及究竟是什么导致了这个错误......

【问题讨论】:

  • 您找到了导致它的原因:尝试将两个标题包含在同一个文件中。 #error 是为了阻止你得到巨大的错误喷涌,因为你把它们包括在内。
  • 感谢@NicolBolas 成功了!

标签: c++ qt opengl


【解决方案1】:

glbinding - 就像几乎所有其他 OpenGL 加载器一样 - 必须摆弄 OpenGL 符号标记以避免命名空间冲突。为此,它必须以特定方式与 OpenGL 定义进行交互,这意味着在包含 glbinding 标头时,您不得包含任何 OpenGL 标头,或者依次包含此类标头。 glbinding 执行的预处理器将防止gl.h 被包含在导致麻烦的方式中。

所以您必须做的是:在您的 C++ 编译单元文件中包含 glbinding 头文件,然后再包含其他所有内容(Qt 头文件、OpenGL 帮助程序库等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多