TransWikia.com

qtでのコンパイルエラー

スタック・オーバーフロー Asked by peridotite on February 20, 2021

docker上のvscodeでc++を用いて、Qt for Beginners – Qt Wiki の’Hello World’を行おうとしました。
main.cppは以下のとおりです。

#include <QApplication>
#include <QPushButton>

int main(int argv, char **args)
{
    QApplication app(argv, args);
    
    QPushButton button ("Hello world !");
    button.show();

    return app.exec();
}   

main.proファイルは次のようです。

TEMPLATE = app TARGET = name_of_the_app
QT = core gui
QT += widgets
SOURCES += main.cpp

その後、ターミナル上で

qmake -project
qmake
make

を行ったところ

g++ -Wl,-O1 -o Culculation_cpp main.o   -lQt5Gui -lQt5Core -lGL -lpthread 
/usr/bin/ld: main.o: in function `main.cold.0':
main.cpp:(.text.unlikely+0xc): undefined reference to `QApplication::~QApplication()'
/usr/bin/ld: main.cpp:(.text.unlikely+0x1f): undefined reference to `QPushButton::~QPushButton()'
/usr/bin/ld: main.o: in function `main':
main.cpp:(.text.startup+0x22): undefined reference to `QApplication::QApplication(int&, char**, int)'
/usr/bin/ld: main.cpp:(.text.startup+0x4f): undefined reference to `QPushButton::QPushButton(QString const&, QWidget*)'
/usr/bin/ld: main.cpp:(.text.startup+0x5f): undefined reference to `QWidget::show()'
/usr/bin/ld: main.cpp:(.text.startup+0x64): undefined reference to `QApplication::exec()'
/usr/bin/ld: main.cpp:(.text.startup+0x6f): undefined reference to `QPushButton::~QPushButton()'
/usr/bin/ld: main.cpp:(.text.startup+0x77): undefined reference to `QApplication::~QApplication()'
collect2: error: ld returned 1 exit status
make: *** [Makefile:139: Culculation_cpp] Error 1

のように出力され、

cannot open source file "QAplication"
cannot open source file "QPushButton"

となってしまいました。
qt5-default, build-essential,apt-get install mesa-common-devはインストール済みです。
どのようにすればよいでしょうか。

追記
QT += widgets が書かれていることを確認し、qmake, make を実行したところ、下記のような出力がありました。

g++ -Wl,-O1 -o Culculation_cpp main.o   -lQt5Gui -lQt5Core -lGL -lpthread 
/usr/bin/ld: main.o: in function `main.cold.0':
main.cpp:(.text.unlikely+0xc): undefined reference to `QApplication::~QApplication()'
/usr/bin/ld: main.cpp:(.text.unlikely+0x1f): undefined reference to `QPushButton::~QPushButton()'
/usr/bin/ld: main.o: in function `main':
main.cpp:(.text.startup+0x22): undefined reference to `QApplication::QApplication(int&, char**, int)'
/usr/bin/ld: main.cpp:(.text.startup+0x4f): undefined reference to `QPushButton::QPushButton(QString const&, QWidget*)'
/usr/bin/ld: main.cpp:(.text.startup+0x5f): undefined reference to `QWidget::show()'
/usr/bin/ld: main.cpp:(.text.startup+0x64): undefined reference to `QApplication::exec()'
/usr/bin/ld: main.cpp:(.text.startup+0x6f): undefined reference to `QPushButton::~QPushButton()'
/usr/bin/ld: main.cpp:(.text.startup+0x77): undefined reference to `QApplication::~QApplication()'
collect2: error: ld returned 1 exit status
make: *** [Makefile:139: Culculation_cpp] Error 1

また上と同じように

#include errors detected. Please update your includePath. Squiggles are disabled for this translation unit (/workspaces/Culculation_cpp/main.cpp).C/C++(1696)
cannot open source file "QApplication"C/C++(1696)

のように書かれておりました。

One Answer

qmake -project は .pro を(半)自動で生成するコマンドなので、main.pro を自分で書いた際には実行する必要がありません。(実行すると内容が上書きされます)

main.cpp と main.pro の内容は問題なさそうに見えます。

g++ -Wl,-O1 -o Culculation_cpp main.o -lQt5Gui -lQt5Core -lGL -lpthread

を見る限り、-lQt5Widgets が不足しているため、undefined reference to … のエラーが発生しています。

.pro ファイルに「QT += widgets」が記載されているか確認してみてください。

ただ、QT += widgets が無い場合には、リンクの前の main.cpp のコンパイル時に
QApplication などの #include でエラーになるような気がします。

Answered by tasuku on February 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP