У меня есть серьезная проблема при использовании opengl в Qt 5.1.0. Мой компилятор MinGW 32 бит, и я использую Windows10 64 бит. Я пытаюсь создать главное окно, содержащее виджет OpenGL. В этом виджетах OpenGL я пытаюсь нарисовать треугольник.Неопределенная ссылка на методы glew в проекте Qt
Я загрузил glew1.9.0 (потому что загрузка glew-2.0.0 дает мне пустую папку lib). Я включил статические библиотеки glew32s.lib
(не динамический .dll
). Я добавил #define GLEW_STATIC
и #include <gl/glew.h>
. Я также добавил путь lib и информацию о библиотеках для ссылки, а также путь включения в мой файл .pro
.
Но все же я получаю неопределенные ссылки для всех функций, включенных в glew.h
. На самом деле я заметил, что, хотя я использую, например, glGenBuffers()
, я получаю сообщение для __glewGenBuffers()
. Внутри gl.glew.h
, я узнал, что строка, где glGenBuffers is defined, calls
__glewGenBuffers`, который еще не определен.
1685 #define glGenBuffers GLEW_GET_FUN(__glewGenBuffers)
14376 GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers;
Таким образом, может быть проблема, что __glewGenBuffers
называется, но еще не определена в glew.h
? Я имею в виду, я пропустил здесь кое-что? Я пытаюсь в течение 2 дней, я пробовал все, что было опубликовано в похожих сообщениях, но я не могу найти решение.
Вот небольшая, но представительная часть кода:
glwidget.cpp:
#define GLEW_STATIC
#include <gl/glew.h>
#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
}
extern "C" void GLWidget::initializeGL()
{
glewInit();
glClearColor(0, 1, 0, 1);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
GLfloat verts[] =
{
+0.0f, +1.0f,
-1.0f, -1.0f,
+1.0f, -1.0f,
};
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
glBindBuffer(GL_ARRAY_BUFFER, myBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
}
void GLWidget::resizeGL(int w, int h)
{
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES, 0, 3);
}
.pro файл:
QT += core gui opengl
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = New_Beam
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
glwidget.cpp
HEADERS += mainwindow.h \
glwidget.h \
../../../../../Qt/Qt5.3.2/glew-1.9.0/include/GL/glew.h
FORMS += mainwindow.ui
win32: LIBS += -L"C:/Qt/Qt5.3.2/glew-1.9.0/lib" -lglew32s -lopengl32
INCLUDEPATH += C:/Qt/Qt5.3.2/glew-1.9.0/include
DEPENDPATH += C:/Qt/Qt5.3.2/glew-1.9.0/include
Послание:
undefined ссылка на '__glewGenBuffers'
То же самое для всех функций glew, которые я использовал. Любой ответ приветствуется.
Большое спасибо, этот код работает отлично, я очень ценю его. –