スタック・オーバーフロー 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)
のように書かれておりました。
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP