3

QT を使用して C++ で簡単な OpenGl アプリケーションを構築するために、 このチュートリアルに従っています。

g++ とコマンド ラインを使用してアプリケーションをコンパイルしようとしていますが、次のエラーが発生します。

/tmp/ccH2KFoZ.o: In function `GLWidget::GLWidget(QWidget*)':
GLWidget.cpp:(.text+0x38): undefined reference to `QGLWidget::QGLWidget(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)'
GLWidget.cpp:(.text+0x41): undefined reference to `vtable for GLWidget'
GLWidget.cpp:(.text+0x4b): undefined reference to `vtable for GLWidget'
GLWidget.cpp:(.text+0x5e): undefined reference to `QGLWidget::setMouseTracking(bool)'
GLWidget.cpp:(.text+0x6f): undefined reference to `QGLWidget::~QGLWidget()'
/tmp/ccH2KFoZ.o: In function `GLWidget::GLWidget(QWidget*)':
GLWidget.cpp:(.text+0xbe): undefined reference to `QGLWidget::QGLWidget(QWidget*, QGLWidget const*, QFlags<Qt::WindowType>)'
GLWidget.cpp:(.text+0xc7): undefined reference to `vtable for GLWidget'
GLWidget.cpp:(.text+0xd1): undefined reference to `vtable for GLWidget'
GLWidget.cpp:(.text+0xe4): undefined reference to `QGLWidget::setMouseTracking(bool)'
GLWidget.cpp:(.text+0xf5): undefined reference to `QGLWidget::~QGLWidget()'
/tmp/ccH2KFoZ.o: In function `GLWidget::resizeGL(int, int)':
GLWidget.cpp:(.text+0x1e1): undefined reference to `gluOrtho2D'
/tmp/ccH2KFoZ.o: In function `GLWidget::keyPressEvent(QKeyEvent*)':
GLWidget.cpp:(.text+0x2dd): undefined reference to `QWidget::close()'
/tmp/ccDIuk1w.o: In function `main':
main.cpp:(.text+0x29): undefined reference to `QApplication::QApplication(int&, char**, int)'
main.cpp:(.text+0x6a): undefined reference to `QApplication::exec()'
main.cpp:(.text+0xa0): undefined reference to `QApplication::~QApplication()'
main.cpp:(.text+0xb8): undefined reference to `QApplication::~QApplication()'
/tmp/ccDIuk1w.o: In function `QWidget::resize(int, int)':
main.cpp:(.text._ZN7QWidget6resizeEii[QWidget::resize(int, int)]+0x2d): undefined reference to `QWidget::resize(QSize const&)'
/tmp/ccDIuk1w.o: In function `GLWidget::~GLWidget()':
main.cpp:(.text._ZN8GLWidgetD1Ev[GLWidget::~GLWidget()]+0x13): undefined reference to `vtable for GLWidget'
main.cpp:(.text._ZN8GLWidgetD1Ev[GLWidget::~GLWidget()]+0x1d): undefined reference to `vtable for GLWidget'
main.cpp:(.text._ZN8GLWidgetD1Ev[GLWidget::~GLWidget()]+0x28): undefined reference to `QGLWidget::~QGLWidget()'
collect2: ld returned 1 exit status

私は解決策を探してみましたが、.proファイルを変更することを提案できるすべての解決策は、Netbeansまたはコードブロックで使用されているものであり、どちらも使用していません。

このアプリケーションをコンパイルできるように g++ に渡す正しいコマンド ライン フラグは何ですか?

現在使用している g++ コマンドは次のとおりです。

g++ *.cpp  -I/usr/include/qt4 -I/usr/include/qt4/Qt -I/usr/include/QtCore -I/usr/include/QtGui -lGL 

編集:このようなプロジェクトファイルを使用することになりました。

TEMPLATE = app
TARGET = glQt
QT += opengl

HEADERS += \
    GLWidget.h

SOURCES += \
    GLWidget.cpp \
    main.cpp
4

4 に答える 4

7

.pro ファイルは、Qt と共に配布される make アプリである QMake に必要です。この pro ファイルは、プロジェクトのビルドに必要なすべてのファイルと Qt モジュールを指定します。

qmake と .pro ファイルの詳細はこちら: http://qt-project.org/doc/qt-4.8/qmake-manual.html

IDE QtCreator をインストールすると、.pro ファイルを変更してアプリをコンパイルする作業が少し簡単になります。

.pro ファイルを変更した後、通常はコマンド qmake を使用して Qt アプリをビルドします。これにより、システムですぐに使用できるメイク ファイルが生成されます (Windows では、Visual Studio 用の .sln ソリューションも生成できます)。

私のプロジェクトの 1 つからの短い .pro ファイル:

TEMPLATE = app
TARGET = icat2browser
QT += network webkit <-- add here the opengl module
DEFINES += QT_LARGEFILE_SUPPORT

HEADERS += \
    qicat2networkaccessmanager.h \
    ctimeline.h \
    cobjectsview.h \
    cicat2WebResponse.h \
    cicat2usersdialog.h \
    cicat2previewdialog.h \
    cicat2login.h \
    cicat2clients.h \
    cicat2browser.h \

SOURCES += \
    qicat2networkaccessmanager.cpp \
    main.cpp \
    ctimeline.cpp \
    cobjectsview.cpp \
    cicat2WebResponse.cpp \
    cicat2usersdialog.cpp \
    cicat2previewdialog.cpp \
    cicat2login.cpp \
    cicat2clients.cpp \
    cicat2browser.cpp \
于 2011-10-04T06:30:48.710 に答える
2

リンカーエラーが発生しているようです。私は使用していませんが、コンパイル方法から、ライブラリQtをリンクしていないように見えます。次のように例をビルドしながらライブラリをQtリンクしてみてください(未テスト):ライブラリの 開発パッケージをインストールしている必要があると推測しています。次のようにコンパイルしてみてください (未テスト): Qt
g++ *.cpp -I./ -I/usr/include/qt4 -I/usr/include/qt4/Qt -I/usr/include/QtCore -I/usr/include/QtGui -lGL -lQtCore -lQtGui -lQtOpenGL
Qtpkg-config files.pc/usr/lib/pkgconfig

g++ *.cpp -I./ `pkg-config --cflags --libs QtOpenGL`  

お役に立てれば!

于 2011-10-04T04:15:52.370 に答える
1

qmake を使用して、Qt インストール用の正しい Makefile を生成することをお勧めします。QtCreator を使用すると、これが簡単になります。5 行のコードである .pro ファイルを作成し、忘れずに QT += opengl を追加してください。次に、qmake と make を実行します。

于 2011-10-04T06:32:51.370 に答える
0

qmakeの使用を強くお勧めします。そうしないと、mocuic、およびrcc自分自身を手動で呼び出す必要があります。

于 2011-10-04T06:30:14.860 に答える