1

我正在尝试通过 QMake 文件在 Qt Creator 中链接 GLEW(与 SDL 和 OpenGL - 注意,不是 SDL 的 OpenGL 实现),尽管我运气不佳。无论我尝试什么,我似乎都会遇到相同的字符串错误,这些错误处理conflicting declaration源于几个typedefs 的问题。我想知道为什么会发生这种情况,以及可以做些什么。

例子

/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

标准数据文件

#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
4

2 回答 2

0

解决您的问题的唯一方法是不使用一个(GLEW 或 SDL_opengl),或者至少不要在任何源文件或头文件中同时包含GL/glew.h和头文件。SDL/SDL_opengl.h

于 2012-01-24T16:07:14.573 回答
0

我遇到过类似的问题,之前我们通过NO_SDL_GLEXT在包含之前定义“解决”了<SDL/SDL_opengl.h>,所以:

#define NO_SDL_GLEXT
#include <SDL/SDL_opengl.h>

我说“已解决”,因为它使错误消失了,但我从未调查过可能的副作用或问题(在那之后不久我们最终离开了 SDL,并且再也没有真正使用过它)。也许值得一试...

于 2012-01-24T16:14:31.930 回答