이번 포스팅에서는 Qt 환경에서 Cross Compile을 하는 방법을 설명하겠습니다.
Cross Compile이란 한 시스템에서 개발한 프로그램이나 소스 등을 다른 시스템에서도 사용할 수 있도록 설정하는 과정입니다.
예를 들어 64-bit 리눅스 환경에서 프로그램을 하나 개발하였습니다.
이 프로그램을 다른 시스템에서 실행하고 싶지만 64-bit가 아닌 32-bit의 리눅스 환경이라면 해당 프로그램은 실행이 불가능합니다.
64-bit 환경에서 만든 프로그램을 ARM CPU의 시스템 32-bit 환경에서 실행시키는 방법으로,
ARM CPU 32-bit 시스템 부에는 Qt Embedded를 설치해야 하고, Cross Compile을 진행할 64-bit 시스템 부에서는Toolchain 설치 및 Qt 설정이 필요합니다.
■ ARM CPU (32-bit 시스템 부)
1. 먼저 ARM CPU를 가진 32-bit 시스템에 Qt-Embedded를 설치하여야 합니다.
설치는 QT 공식 홈페이지에서 Download -> Qt for Application Development -> Get Open Source -> View All-in the archive 후
qt-everywhere-opensource-src-4.8.6.tar.gz 파일을 다운받습니다.
링크: http://download.qt.io/archive/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz
2. 다운로드 받은 파일의 압축을 해제한 후 해제한 폴더로 이동합니다.
# tar zxvf qt-everywhere-opensource-src-4.8.6.tar.gz |
3. qmake.conf 파일을 텍스트 편집기로 열어줍니다.
# gedit mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf |
4. 아래의 내용을 복사하여 위에서 연 qmake.conf 파일에 붙여 넣습니다.
# include(../../common/linux.conf) # modifications to g++.conf # modifications to linux.conf load(qt_config) |
5. 파일을 붙여 넣었으면 아래의 명령어로 Qt-Embedded의 설치를 위한 환경을 설정합니다.
# ./configure \ -embedded arm \ -xplatform qws/linux-arm-gnueabi-g++ \ -little-endian \ -opensource \ -host-little-endian \ -confirm-license \ -nomake demos \ -nomake examples \ -no-webkit \ -no-gui \ -prefix [Qt-embedded-4.8.6 설치할 경로] |
6. 설정을 완료하면 아래의 명령어로 Qt-Embedded를 설치합니다.
# make # make install |
■ Cross Compile을 진행할 PC (64-bit 시스템 부)
1. Yocto Source Package를 설치합니다. Yocto Project는 리눅스 기반의 임베디드 제품의 소프트웨어 패키지를 빌드하는 툴로,
현재는 업계 표준 패키징 솔루션이라고 할 수 있습니다.
# yum update # yum install phablet-tools sed wget cvs subversion git-core coreutils unzip texi2html texinfo docbook-utils gawk python-pysqlite2 diffstat help2man desktop-file-utils chrpath autoconf automake groff xterm |
2. ARM CPU를 가진 시스템이므로 ARM Cross Compile Toolchain인 arm-linux-gnueabihf-gcc를 설치합니다.
Toolchain은 "A toolchain is the set of compiler + linker + librarian + any other tools you need to produce theexecutable (+ shared libraries, etc) for the target."을 뜻합니다.
# mkdir /home/[Toolchain설치할 폴더 명] # cd /home/[Toolchain설치할 폴더 명] # wget https://releases.linaro.org/archive/14.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2 # tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2 |
- 설치 중 ld-linux.so.2 관련 오류가 발생할 경우 구성요소가 설치되어 있지 않은 경우이므로 해당 명령어로 설치합니다.
# yum install glibc.i686 libgcc.i686 libstdc++.i686 |
3. 파일을 생성하여 환경 변수를 설정한 후 실행합니다.
# vi /etc/profile.d/[생성할 쉘 스크립트 명.sh] # export PATH=$PATH:[Toolchain을 설치한 경로]/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin:[Toolchain을 설치한 경로]/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/lib # source /etc/profile.d/[생성한 쉘 스크립트 명.sh] |
- Version 정보가 정상적으로 출력되면 설치가 완료된 것 입니다.
# arm-linux-gnueabihf-gcc --version |
4. 이제 설치한 arm-linux-gnueabihf-gcc를 Qt Options에서 Compiler 관련 부분에 추가 해줘야 합니다.
- Qt Creator를 실행한 후 상단 메뉴 탭에서 Tools – Options 선택합니다.
- Options 창에서 왼쪽 메뉴의 Build & Run 선택 후 Compiler 탭을 선택합니다.
① Add – GCC – C를 선택합니다. Name을 입력해주고 Browse를 눌러 [Toolchain 설치한 경로]/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin에서 arm-linux-gnueabihf-gcc를 선택합니다.
② Add – GCC – C++를 선택합니다. Name을 입력해주고 Browse를 눌러 [Toolchain 설치한 경로]/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin에서 arm-linux-gnueabihf-g++를 선택합니다.
5. ARM CPU 쪽에 대한 Device를 설정해주어야 합니다.
- Devices 탭에서 Add를 선택하여 추가 마법사 창이 나타나면 Generic Linux Device를 선택하고 Start Wizard 버튼을 선택합니다.
- 장치의 이름과 IP, 사용자명, 암호를 입력해줍니다. 192.168.0.230은 Target 시스템의 IP 주소입니다.
6. arm-linux-gnueabihf-gcc 관련 컴파일러들을 Kits에 추가합니다.
- Options 탭을 열고 왼쪽 메뉴의 Build & Run 에서 Kits 탭으로 이동하여 Add 버튼을 선택합니다.
- 새로운 Kit에 대한 Name을 입력 후 Sysroot 항목 Browse를 눌러 [ToolChain 설치한 경로]/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux로 선택합니다.
- Qt Version을 ARM CPU에 설치한 Qt 4.8.6 (Qt-Embedded) 버전으로 변경합니다.
이제 Qt Projects 창에서 Kit를 변경하면 프로그램 Build 시 arm-linux-gnueabihf-gcc를 이용하여 Compile을 진행하기 때문에
만들어진 실행 프로그램은 ARM CPU 시스템의 32-bit 환경에서 실행이 가능합니다.
물론 이 프로그램을 64-bit 환경에서 다시 실행시키기 위해서는 기존 64-bit Compiler의 Kit를 이용해야 합니다.
Qt에서는 여러 개의 Kit들을 미리 만들 수 있어, Kit를 시스템의 환경에 따라 선택함으로써 유연하게 적용이 가능합니다.
추가로 ARM 32-bit Target 시스템에 실행 파일을 바로 생성할 수 있는데 Project 파일에서 아래와 같이 입력하면
Target 시스템의 경로에 실행파일이 생성된 것을 확인할 수 있습니다.
.pro 파일
target.path = [실행 파일을 생성할 경로] INSTALLS += target |
'Qt' 카테고리의 다른 글
QWidget / QDialog / QMainWindow 및 Modal / Modaless 비교 (1) | 2020.02.24 |
---|---|
QTableView에 CheckBox 및 ComboBox 삽입하기 (0) | 2020.02.21 |
QToolTip Class 정보 출력하기 (1) | 2020.02.17 |
QSettings Class 프로그램 설정 값 저장하기 (2) | 2020.02.12 |
QProcess Class 외부 프로그램 출력 값 가져오기 (0) | 2020.02.10 |