QtOpengl 与 mac 上的 Opengl 框架冲突

Posted

技术标签:

【中文标题】QtOpengl 与 mac 上的 Opengl 框架冲突【英文标题】:QtOpengl conflict with Opengl framwork on mac 【发布时间】:2016-07-13 11:35:50 【问题描述】:

我正在尝试将 cocos2d-x 3.12 和 Qt 5.7 合并在一起,并且在链接时不断收到冲突错误消息:

In file included from Qt5.7.0/5.7/clang_64/lib/QtOpenGL.framework/Headers/QGLWidget:1:
In file included from Qt5.7.0/5.7/clang_64/lib/QtOpenGL.framework/Headers/qgl.h:45:
In file included from Qt5.7.0/5.7/clang_64/lib/QtGui.framework/Headers/qopengl.h:124:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenGL.framework/Headers/gl3.h:2704:21: error: conflicting types for 'glDepthRange'
GLAPI void APIENTRY glDepthRangef (GLclampf n, GLclampf f);
                    ^
demo/cocos2d-x/cocos/platform/mac/CCGL-mac.h:43:41: note: expanded from macro 'glDepthRangef'
#define glDepthRangef                   glDepthRange
                                        ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks/OpenGL.framework/Headers/gl3.h:1662:21: note: previous declaration is here
GLAPI void APIENTRY glDepthRange (GLclampd near, GLclampd far);

我试图删除 .pro 文件中的 Opengl 框架,如下所示:

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QtApplication
TEMPLATE = app

#INCLUDEPATH += /usr/local/include
#LIBS += -L/usr/local/lib/ -lGLEW
LIBS += -L/usr/local/lib/ -lz
LIBS += -L/usr/local/lib/ -lcurl

LIBS    += -framework Cocoa
LIBS    += -framework Foundation
LIBS    += -framework OpenAL
LIBS    += -framework IOKit
LIBS    += -framework CoreVideo
LIBS    += -framework OpenGL

但它不起作用,仍然是同样的错误。

任何建议将不胜感激,谢谢:)

【问题讨论】:

看起来像一个 Qt 错误,但您确实需要显示一个最小的 main.cpp 来重现它。 【参考方案1】:

我认为这个错误是由于 Qt 覆盖 glew.h 或 GL.h 提供的 OpenGL 相关宏定义的策略引起的。其他人试图处理这个并遇到类似的问题(例如GLEW and Qt5 redefinition of headers)。解决方法是避免在同一个文件中包含 GL.h/glew.h 和任何与 OpenGL 相关的 Qt 标头。

【讨论】:

以上是关于QtOpengl 与 mac 上的 Opengl 框架冲突的主要内容,如果未能解决你的问题,请参考以下文章

QtOpenGL - 共享 OpenGL 上下文

QtOpenGL 和 MacOS X——软件渲染?

qtopencv和qtopengl的区别

实例渲染 OpenGL

QtOpengl的演变[关闭]

Qt OpenGL-如何根据鼠标点击获取对象