【问题标题】:Qt 5.5 with qmake: Linker cannot resolve OpenGL function calls带有 qmake 的 Qt 5.5:链接器无法解析 OpenGL 函数调用
【发布时间】:2015-07-28 22:43:31
【问题描述】:

当使用 Qt 5.5、qmake 和 MSVC 13 编译带有一些基本 OpenGL 函数调用的基本样板 Qt 应用程序时,我收到以下链接器错误:

glwidget.obj:-1: error: LNK2019: unresolved external symbol __imp__glClear@4 referenced in function "public: virtual void __thiscall GLWidget::initializeGL(void)" (?initializeGL@GLWidget@@UAEXXZ)
glwidget.obj:-1: error: LNK2019: unresolved external symbol __imp__glClearColor@16 referenced in function "public: virtual void __thiscall GLWidget::initializeGL(void)" (?initializeGL@GLWidget@@UAEXXZ)
debug\OpenGLApp.exe:-1: error: LNK1120: 2 unresolved externals

我有:

  • 指定的 QT += opengl
  • 显式指定 CONFIG += windows(显然 += 控制台禁用 gui 功能)

.pro 文件:

QT       += core gui opengl widgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets opengl

TARGET = OpenGLApp
TEMPLATE = app

CONFIG += windows

SOURCES += main.cpp\
        mainwindow.cpp \
    glwidget.cpp

HEADERS  += mainwindow.h \
    glwidget.h

glwidget.cpp 文件:

#include "glwidget.h"

GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) {

}

void GLWidget::initializeGL() {
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
}

glwidget.h 文件:

#include <QOpenGLWidget>
#include <QOpenGLFunctions>

class GLWidget : public QOpenGLWidget {
    Q_OBJECT
public:    
    GLWidget(QWidget *);

    void initializeGL();
    void resizeGL();
    void PaintGL();

};

在另一个几乎相同的测试程序中,我遇到了链接器无法解析 OpenGL 函数调用的相同问题。通过改用 CMake,特别是使用以下“find_package(OpenGL REQUIRED)”行,并在“target_link_libraries”中添加“${OPENGL_LIBRARIES}”,我能够解决问题:

#Qt5
find_package(Qt5Core REQUIRED)

find_package(Qt5Widgets REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)

#OpenGL
find_package(OpenGL REQUIRED)

target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Gui Qt5::Core Qt5::OpenGL ${OPENGL_LIBRARIES})

因此,我怀疑 qmake 无法找到 OpenGL 库,尽管我不确定如何检查以及可能是什么原因,因此如果有人能指出我缺少的内容,我将不胜感激。

【问题讨论】:

    标签: c++ qt opengl qmake


    【解决方案1】:

    你需要在.pro文件中添加

    LIBS += opengl32.lib
    

    如果您使用 Visual Studio 正确链接 OpenGL 库。

    您可以在此处找到更多详细信息:

    http://doc.qt.io/qt-5/windows-requirements.html

    【讨论】:

    • 非常感谢,这适用于 Qt 5.11.1 MSVC2017 64 位。注意 1:它也可以在没有明确指定 CONFIG += windows 的情况下工作。注2:如果你需要来自GLU(OpenGL Utility Library)的函数,比如gluPerspective,那么你还需要LIBS += glu32.lib。注3:在Qt Creator中,“Clean All”+“Rebuild All”不足以考虑到这个变化,需要手动删除build目录并重新编译。注意 4:在实例化 Application 之前,您可能需要调用 QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);,参见。此答案中提供的链接。
    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2020-05-06
    • 2013-06-29
    • 1970-01-01
    • 2013-04-04
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多