FindQt4无法正确链接QtOpenGL项目

时间:2013-06-07 17:43:09

标签: qt opengl linker cmake

使用QtOpenGL的项目无法链接到gl调用,但Windows上的(Linux很高兴)。以下最小案例项目的MSVC 2008错误消息是:

1>gllink.obj : error LNK2019: unresolved external symbol __imp__glLoadIdentity@0 referenced in function "protected: virtual void __thiscall ImageWidget::initializeGL(void)" (?initializeGL@ImageWidget@@MAEXXZ)
1>gllink.obj : error LNK2019: unresolved external symbol __imp__glMatrixMode@4 referenced in function "protected: virtual void __thiscall ImageWidget::initializeGL(void)" (?initializeGL@ImageWidget@@MAEXXZ)
1>gllink.exe : fatal error LNK1120: 2 unresolved externals

当我手动添加" opengl32.lib&#34时,这些错误消失了。到了"附加依赖"列表,但我认为这不应该是必要的,因为这应该由FindQt4.cmake完成,或者应该由QtOpenGL对opengl32的依赖关系来处理。当然,我一定是搞错了,所以我真的很感激如何正确修复这个项目。

gllink.cpp

#include <QtOpenGL>
#include <QWidget>

class ImageWidget : public QGLWidget
{
public:
   ImageWidget(QWidget* parent = 0) :
      QGLWidget(parent)
   {
   }

protected:
   void initializeGL()
   {
      glMatrixMode( GL_MODELVIEW );
      glLoadIdentity();
   }
};

int main()
{
   ImageWidget w;
   return 0;
}



的CMakeLists.txt

PROJECT( gllink )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )

FIND_PACKAGE( Qt4 4.6.0 REQUIRED COMPONENTS QtCore QtGui QtOpenGL )
INCLUDE( ${QT_USE_FILE} )

ADD_EXECUTABLE( gllink gllink.cpp )
TARGET_LINK_LIBRARIES( gllink ${QT_LIBRARIES} )

1 个答案:

答案 0 :(得分:3)

FindQt4没有处理这个问题,你必须自己搜索OpenGL。现在CMake提供了一个FindOpenGL包,因此修复项目只需添加find_package( OpenGL )并将库链接到目标:

PROJECT( gllink )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )

FIND_PACKAGE( OpenGL )

FIND_PACKAGE( Qt4 4.6.0 REQUIRED QtCore QtGui QtOpenGL )
INCLUDE( ${QT_USE_FILE} )

ADD_EXECUTABLE( gllink gllink.cpp )
TARGET_LINK_LIBRARIES( gllink ${OPENGL_LIBRARIES} ${QT_LIBRARIES} )

顺便说一句,您应该检查这些库是否真的找到了,如果不是这样的话就会警告用户:)