2013-06-07 3 views
3

Проекты, использующие QtOpenGL, не могут ссылаться на вызовы gl, но только на Windows (Linux доволен). Сообщения об ошибках MSVC 2008 для следующего минимален случае проекта являются:FindQt4 не удается правильно связать проект QtOpenGL

1>gllink.obj : error LNK2019: unresolved external symbol [email protected] referenced in function "protected: virtual void __thiscall ImageWidget::initializeGL(void)" ([email protected]@@MAEXXZ) 
1>gllink.obj : error LNK2019: unresolved external symbol __imp__[email protected] referenced in function "protected: virtual void __thiscall ImageWidget::initializeGL(void)" ([email protected]@@MAEXXZ) 
1>gllink.exe : fatal error LNK1120: 2 unresolved externals 

Эти ошибки исчезают, когда я вручную добавить «opengl32.lib» в списке «Дополнительные зависимости», но я считаю, что это не должно быть необходимым, так как это должно быть сделано 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

Почему это было приостановлено? – cmannett85

ответ

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}) 

Btw, вы должны проверить, если эти библиотеки действительно нашли и предупреждают пользователя о проблема, если они не являются :)

Смежные вопросы