Qt Creator 中的 Glew 链接问题?
Posted
技术标签:
【中文标题】Qt Creator 中的 Glew 链接问题?【英文标题】:Glew Linking Problems in Qt Creator? 【发布时间】:2012-01-24 16:01:41 【问题描述】:我正在尝试通过 QMake 文件在 Qt Creator 中链接 GLEW(使用 SDL 和 OpenGL - 注意,不是 SDL 的 OpenGL 实现),尽管我运气不佳。无论我尝试什么,我似乎都会遇到相同的字符串错误,这些错误处理源自一些typedef
s 的conflicting declaration
问题。我想知道为什么会发生这种情况,以及可以采取哪些措施。
示例
/usr/include/SDL/SDL_opengl.h:4855: error: conflicting declaration ‘typedef void (* PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum, GLenum, const GLfloat*)’
/usr/include/GL/glew.h:12201: error: ‘PFNGLFRAGMENTLIGHTFVSGIXPROC’ has a previous declaration as ‘typedef void (* PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum, GLenum, GLfloat*)’
这是因为我正在链接 SDL(看看它如何支持 OpenGL),还是这里发生了其他事情?
Qmake 文件
QT += core
LIBS += -lSDL -lSDL_image -lopengl32 -lGLU -lGLEW
stdafx.h
#pragma once
/*************/
/* #includes */
/*************/
//GL / SDL
#include <GL/glew.h>
#define GLEW_STATIC
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glext.h>
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
//STD
#include <iostream>
#include <fstream>
//Qt
#include <QListIterator>
#include <QMapIterator>
#include <QVector4D>
#include <QColor>
/********************/
/* Using Statements */
/********************/
using std::cout;
using std::endl;
using std::cin;
using std::fstream;
stdafx.cpp
#define GL_GLEXT_PROTOTYPES
【问题讨论】:
这些是编译错误 - 不是链接器错误 啊,谢谢。下次我会记住这一点。 为什么要包含 SDL? Qt 做了 SDL 可以做的所有事情。 我正在构建一个游戏引擎,而 Qt 并不适合。 实际上,Qt 可以像 SDL 一样为您提供 OpenGL 上下文。在这两种情况下,实际的发动机部件都是分开的。如果您使用的是 Qt,不妨使用它的 OpenGL 功能。 【参考方案1】:解决问题的唯一方法是不要使用一个(GLEW 或 SDL_opengl),或者至少不要在任何源文件或头文件中同时包含 GL/glew.h
和 SDL/SDL_opengl.h
头文件。
【讨论】:
【参考方案2】:我遇到过类似的问题,之前我们通过在包含 <SDL/SDL_opengl.h>
之前定义 NO_SDL_GLEXT
来“解决”,所以:
#define NO_SDL_GLEXT
#include <SDL/SDL_opengl.h>
我说“已解决”,因为它使错误消失了,但我从未调查过可能的副作用或问题(在那之后不久我们最终离开了 SDL,再也没有真正使用过它)。也许值得一试...
【讨论】:
以上是关于Qt Creator 中的 Glew 链接问题?的主要内容,如果未能解决你的问题,请参考以下文章
使用 qt-creator 将库项目链接到 qt 控制台/小部件项目
QT Creator 中的部署和静态打包将 QT 和 OpenCV 链接到单个可执行文件中
Qt Creator 2.7.0 (Qt 5.0.2) 中的 C++11 线程支持