3

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」を「追加の依存関係」リストに手動で追加すると消えますが、FindQt4.cmake で行うか、依存関係によって処理する必要があるため、これは必要ないと思います。 opengl32 上の QtOpenGL。もちろん、私は間違っているに違いないので、このプロジェクトを適切に修正する方法について意見をいただければ幸いです。

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

1 に答える 1

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

ところで、これらのライブラリが実際に見つかったかどうかを確認し、そうでない場合はユーザーに問題について警告する必要があります:)

于 2013-06-11T08:14:57.543 に答える