在Qt Creator中发现链接问题

Glew Linking Problems in Qt Creator?

本文关键字:链接 问题 发现 Qt Creator      更新时间:2023-10-16

我正试图通过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

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

我之前也遇到过类似的问题,我们通过在包含<SDL/SDL_opengl.h>之前定义NO_SDL_GLEXT来"解决"这些问题,因此:

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

我说"解决了",因为它让错误消失了,但我从未调查过可能的副作用或问题(在那之后不久,我们就离开了SDL,也从未真正使用过它)。也许值得一试。。。