반응형


Ubuntu Linux 18.04에  미리 빌드되어 나오는 qt 설치 파일을 다운로드 받아 설치 후, 간단한 예제 코드를 작성하여 터미널에서 컴파일 하는 과정을 다루었습니다.





1. http://download.qt.io/archive/qt/ 의 최신버전 디렉토리(글 작성하는 시점에서는 5.14.2)에 있는 리눅스용 설치파일을 다운로드 받습니다.  

현재 리눅스용은 64비트용만 제공되고 있습니다. (qt-opensource-linux-x64-5.14.2.run )



다운로드 속도가 너무 느릴 경우에는 미러 사이트(http://download.qt.io/static/mirrorlist/ )에서 받으면 됩니다. 미러 사이트의 경우에는 다운로드 경로가 /qtproject/official_releases/qt/입니다.



예를 들어 http://mirror.bit.edu.cn/qtproject/  에서 5.14.2버전을 다운로드 받는다면 전체 경로는 아래처럼 됩니다.

http://mirror.bit.edu.cn/qtproject/official_releases/qt/5.14/5.14.2/ 




2. 패키지 리스트를 업데이트하고


webnautes@webnautes-pc:~$ sudo apt-get update




C/C++ 컴파일러와 C/C++를 위한 라이브러리, 헤더파일, make같은 유틸리티 도구 등이 포함되어 있는 build-essential 패키지를 설치합니다.


webnautes@webnautes-pc:~$ sudo apt-get install build-essential




기존에  Qt4가 설치되어 있었다면 제거해줘야 합니다.


webnautes@webnautes-pc:~$ sudo apt-get purge --auto-remove libqt4-dev




다운로드 받은  qt 설치 프로그램을 실행가능하도록  chmod 명령으로 퍼미션을 변경한 후,  실행합니다.


webnautes@webnautes-pc:~$ cd 다운로드

webnautes@webnautes-pc:~/다운로드$ chmod +x qt-opensource-linux-x64-5.14.2.run

webnautes@webnautes-pc:~/다운로드$ ./qt-opensource-linux-x64-5.14.2.run




이제 설치 과정이 진행됩니다.  설명하지 않은 부분은 Next 버튼을 클릭하여 진행하면 됩니다.





기존 Qt 계정을 입력하거나 새로운 Qt 계정을 생성해야 다음 단계로 진행할 수 있습니다. 





새로운 계정을 생성한 경우에는 이메일을 확인해야 다음단계를 진행할 수 있습니다. 





도착한 이메일의 링크를 클릭하면 추가 정보를 요구합니다.  입력 후, Confirm을 클릭합니다. 





다시 Qt 설치로 돌아와 Next를 클릭하면 다음 단계로 진행됩니다. 





I have read에 있는 체크박스를 클릭 후, Next를 클릭합니다. 





qt 설치 경로를 지정합니다.  따로 적어놓았다가 이후 PATH 지정시 사용합니다.





설치할 수 있는 구성요소는 다음과 같습니다. 전체 설치시 4.86기가가 필요합니다. 

Qt Creator는 qt에 포함되어 배포되는 통합 개발 환경( IDE)입니다. 





3. 설치완료 후, 편집기로 사용자 홈디렉토리에 있는 .bashrc 파일을 수정합니다.


webnautes@webnautes-pc:~$ nano ~/.bashrc



 .bashrc 마지막 줄에 아래 내용을 추가합니다. 파란색 부분은 앞에서 지정했던 qt 설치 경로입니다. qt 버전이 다른 경우에는 경로가 약간 차이가 있을 수 있습니다.


export PATH=/home/webnautes/Qt5.14.2/5.14.2/gcc_64/bin/:/home/webnautes/Qt5.14.2/Tools/QtCreator/bin/:$PATH




패스 환경 추가한 것을 적용시키고


webnautes@webnautes-pc:~$ source ~/.bashrc




qmake를 터미널에서 실행시켜 현재 활성화된 qt 버전을 확인해봅니다. qt 버전이 다르다면  apt-get install 명령으로 설치된 qt 패키지가 활성화되어 있는 것입니다.  

apt-get remove 명령으로 qt 패키지를 제거해야 합니다.


webnautes@webnautes-pc:~$ qmake -version

QMake version 3.1

Using Qt version 5.14.2 in /home/webnautes/Qt5.14.2/5.14.2/gcc_64/lib




4. qtcreator를 사용하지 않고 터미널에서 간단한 qt 예제 코드를 컴파일을 진행해봅니다.


4-1. 프로젝트 파일들을 저장할 디렉토리를 생성하고 이동합니다.


webnautes@webnautes-pc:~$ mkdir SimpleQtExample

webnautes@webnautes-pc:~$ cd SimpleQtExample




편집기로 새로운 cpp 파일을 열어서 


webnautes@webnautes-pc:~/SimpleQtExample$ nano simple.cpp




다음 코드를 입력합니다. 윈도우를 하나 띄우고 타이틀바에 "Simple example"이라는 문자열을 출력하는 예제입니다. 


#include <QApplication>
#include <QWidget>

int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    QWidget window;

    window.resize(250, 150);
    window.setWindowTitle("Simple example");
    window.show();

    return app.exec();
}




현재 프로젝트 디렉토리에는 소스코드만 있습니다.


webnautes@webnautes-pc:~/SimpleQtExample$ ls

simple.cpp




4-2. qmake -project 명령을 사용하면 qt 프로젝트 파일을 생성해줍니다.

qt 프로젝트 파일의 정보를 가지고 Makefile을 만들게 됩니다.


webnautes@webnautes-pc:~/SimpleQtExample$ qmake -project




프로젝트 파일은 확장자가 pro인 파일이 자동으로 생성됩니다.



webnautes@webnautes-pc:~/SimpleQtExample$ ls

SimpleQtExample.pro  simple.cpp




4-3.  qt 프로젝트 파일이 생성될 때, qt 코드에서 사용중인 qt 모듈 이름이 자동으로 추가되지 않습니다.  

qt 프로젝트 파일을 열어서 사용중인 qt 모듈 이름을 추가해줘야 합니다.



사용 중인 qt 모듈 이름을 찾는 방법입니다.


예제 코드에서 인클루드하고 있는 QApplication과 Qwidget 찾아보면  두 개 모두 QtWidgets 디렉토리에 포함되어 있습니다.  

사용하고 있는 모듈 이름은 디렉토리 이름에서 Qt를 빼고 소문자로 변환한 widgets가 됩니다. 


webnautes@webnautes-pc:~/SimpleQtExample$ find ~ | grep QApplication
/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtGui/QApplicationStateChangeEvent

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QApplication

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtGui/QApplicationStateChangeEvent

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QApplication

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtGui/QApplicationStateChangeEvent

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QApplication
webnautes@webnautes-pc:~/SimpleQtExample$ find ~ | grep QWidget
/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtGui/QWidgetSet

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtGui/QWidgetList

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtGui/QWidgetMapper

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QWidgetAction

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QWidget

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QWidgetItem

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QWidgetItemV2

/home/webnautes/Qt5.14.2/5.14.2/gcc_64/include/QtWidgets/QWidgetData

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtGui/QWidgetSet

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtGui/QWidgetList

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtGui/QWidgetMapper

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QWidgetAction

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QWidget

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QWidgetItem

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QWidgetItemV2

/home/webnautes/Qt5.14.2/5.14.2/android/include/QtWidgets/QWidgetData

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtGui/QWidgetSet

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtGui/QWidgetList

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtGui/QWidgetMapper

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QWidgetAction

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QWidget

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QWidgetItem

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QWidgetItemV2

/home/webnautes/Qt5.14.2/5.14.2/Src/qtbase/include/QtWidgets/QWidgetData




다음과 같이 SimpleQtExample.pro 파일에  widgets를 추가해줍니다.  

core와 gui는 디폴트로 추가되어 있으므로 적지 않아도 됩니다.


######################################################################

# Automatically generated by qmake (3.1) Fri Apr 17 23:14:18 2020

######################################################################


QT += widgets

TEMPLATE = app

TARGET = SimpleQtExample

INCLUDEPATH += .


# You can make your code fail to compile if you use deprecated APIs.

# In order to do so, uncomment the following line.

# Please consult the documentation of the deprecated API in order to know

# how to port your code away from it.

# You can also select to disable deprecated APIs only up to a certain version of Qt.

#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


# Input

SOURCES += simple.cpp




4-4. qmake 명령으로 Makefile을 생성합니다.

Makefile은 다음 두 가지 과정을 자동화하기 위해 필요한 것들을 기술하고 있습니다.


  • 컴파일러로 소스 코드 파일을 컴파일하여 오브젝트 파일을 생성

  • 링커를 사용하여 오브젝트 파일과 라이브러리 파일을 결합하여 실행 파일을 생성



webnautes@webnautes-pc:~/SimpleQtExample$ qmake

Info: creating stash file /home/webnautes/SimpleQtExample/.qmake.stash




Makefile이 프로젝트 폴더에 생성됩니다.


webnautes@webnautes-pc:~/SimpleQtExample$ ls

Makefile  SimpleQtExample.pro  simple.cpp




4-5. make 명령은  Makefile에 기술된대로 컴파일 및 링크를 실행합니다.


webnautes@webnautes-pc:~/SimpleQtExample$ make

g++ -c -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -I. -I../Qt5.14.2/5.14.2/gcc_64/include -I../Qt5.14.2/5.14.2/gcc_64/include/QtWidgets -I../Qt5.14.2/5.14.2/gcc_64/include/QtGui -I../Qt5.14.2/5.14.2/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I../Qt5.14.2/5.14.2/gcc_64/mkspecs/linux-g++ -o simple.o simple.cpp

g++ -Wl,-O1 -Wl,-rpath,/home/webnautes/Qt5.14.2/5.14.2/gcc_64/lib -o SimpleQtExample simple.o   /home/webnautes/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Widgets.so /home/webnautes/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Gui.so /home/webnautes/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Core.so -lGL -lpthread 




중간 결과물인  확장자 .o인 오브젝트 파일과 프로젝트 디렉토리와 동일한 이름을 갖는 실행파일이 생성되었습니다.  

문제 발생시 5번을 참고하세요. 


webnautes@webnautes-pc:~/SimpleQtExample$ ls

Makefile  SimpleQtExample  SimpleQtExample.pro  simple.cpp simple.o




이제 실행시켜 보면 작은 윈도우가 띄어지고 타이틀바에 "Simple example" 이라는 문자열이 출력됩니다.


webnautes@webnautes-pc:~/SimpleQtExample$ ./SimpleQtExample






5. 참고 - make 명령시 다음과 같은 에러가 발생할 수 있습니다.


5-1. 헤더파일을 못찾거나("no such file or directory")  링크 에러가 나는 것은(undefined reference) 해당 qt 코드에서 사용중인 qt 모듈이름이  qt 프로젝트 파일에 제대로 추가 안되서 발생합니다.  

4-3을 참고하셔서 에러나는 qt 모듈 이름을 찾아보시면 됩니다. ( 보통 에러 메시지에서 Q로 시작되는 단어입니다.)


fatal error: QApplication: 그런 파일이나 디렉터리가 없습니다

또는

fatal error: QApplication: no such file or directory



undefined reference to `QApplication::~QApplication()'




5-2. OpenGL 관련 링크 에러가 난다면 


/usr/bin/ld: cannot find -lGL



다음 패키지들을 설치해주면 됩니다.


webnautes@webnautes-pc:~/SimpleQtExample$ sudo apt-get install mesa-common-dev libglu1-mesa-dev



다시 make 명령을 해보면 문제 없이 실행파일이 생성됩니다.




5-3.  보통 make 명령은 소스 코드에 변화가 없으면 컴파일 및 링크 과정이 진행되지 않기 때문에 보여지는 메시지입니다.

qt 프로젝트 파일을 수정한 후에도 나타날 수 있습니다. 



webnautes@webnautes-pc:~/SimpleQtExample$ make

make: 'first'을(를) 위해 할 일이 없습니다.




make clean 명령으로 기존에 생성됬던 실행파일과 오브젝트 파일을 지우고 다시 make 명령을 해야 합니다.


webnautes@webnautes-pc:~/SimpleQtExample$  make clean

rm -f moc_predefs.h

rm -f simple.o

rm -f *~ core *.core

webnautes@webnautes-pc:~/SimpleQtExample$ make




최초 작성. 2020. 4. 17




관련 포스팅


Ubuntu 16.04에 Qt 5.10 개발환경 구축

https://webnautes.tistory.com/1120



반응형

'개발 환경 > Qt' 카테고리의 다른 글

Ubuntu 18.04에 Qt 5.14 개발환경 구축  (6) 2020.04.17
Ubuntu 16.04에 Qt 5.10 개발환경 구축  (27) 2017.12.30

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. 푸르름 2020.08.25 12:52

    알찬 내용이 많이 있어서, 잘 읽어보고 갑니다.
    QT를 공부하고 싶은데, 일반 서적은 너무 어렵고, 유튜브에는 영어만 있고, 개인 블로그에는 자료가 없네요.
    혹시 단계적으로 알고 계신 것 정리 해 주시면, 저 같은 사람들에게 큰 도움이 될 것 같아요. ㅋㅋ
    감사합니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.08.25 20:46 신고

      감사합니다. QT를 많이 해본게 아니라서 올릴 정도는 못됩니다..

      혹 보셨나 모르겠지만 아래 링크가 괜찮아 보이네요
      http://zetcode.com/gui/qt5/

  2. 2020.09.22 11:03

    /usr/bin/ld: cannot find -lGL
    에러땜에 고생하다가 여기서 도움 받고 해결 했습니다.
    감사합니다.!!!!

  3. 2020.11.05 16:58

    비밀댓글입니다

+ Recent posts