

docker上のvscodeでc++を用いて、[Qt for Beginners - Qt
Wiki](https://wiki.qt.io/Qt_for_Beginners) の'Hello World'を行おうとしました。  
main.cppは以下のとおりです。

[code]

    #include <QApplication>
    #include <QPushButton>
    
    int main(int argv, char **args)
    {
        QApplication app(argv, args);
        
        QPushButton button ("Hello world !");
        button.show();
    
        return app.exec();
    }   
    
[/code]

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

[code]

    TEMPLATE = app TARGET = name_of_the_app
    QT = core gui
    QT += widgets
    SOURCES += main.cpp
    
[/code]

その後、ターミナル上で

[code]

    qmake -project
    qmake
    make
    
[/code]

を行ったところ

[code]

    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
    
[/code]

のように出力され、

[code]

    cannot open source file "QAplication"
    cannot open source file "QPushButton"
    
[/code]

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

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

[code]

    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
    
[/code]

また上と同じように

[code]

    #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)
    
[/code]

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


CC BY-SA 4.0
2021-01-25T13:51:52.577
73565
2021-01-25T16:37:12.267
2021-01-25T16:37:12.267
3060
30396
question
c++ ubuntu qt qt5
qtでのコンパイルエラー


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 でエラーになるような気がします。


CC BY-SA 4.0
2021-01-25T14:03:07.480
73566
2021-01-25T14:03:07.480
10245
73565
answer