그래픽 & 멀티미디어
freetype 라이브러리 설치
QT를 사용하기 위해서는 freetype이 필요합니다. 그러나 CentOS4를 설치하면 freetype 라이브러리가 설치되지 않습니다. freetype를 직접 구해서 설치해 줍니다.
우선 freetype 라이브러리가 설치되었는지 확인해 보겠습니다. freetype 라이브러리가 설치되어 있다면 /usr/include 디렉토리 밑에 freetype 디렉토리가 있습니다.
또는 /usr/include/freetype2 로 되어 있는 경우가 있습니다. 이럴 때에는 freetype으로 링크를 생성하면 됩니다.
]# ln -s /usr/include/freetype2/freetype /usr/include/freetype
만일 freetype 라이브러리가 없으면 아래의 순서에 따라 설치해 주십시오.
- The FreeType Project 홈페이지를 방문합니다.
- Download 링크에서 freetype 라이브러리를 다운받습니다.
- 글을 작성하는 지금 freetype 2.2.1 버전이라 freetype-2.2.1.tar.gz을 내려 받았습니다.
- 이 파일을 적당한 곳에 내려 받아 풀기를 합니다. 라이브러리 설치 후에 삭제해도 되는 파일이므로 적당한 곳에 풀어 놓고 작업하시면 됩니다.
]# tar zxvf freetype-2.2.1.tar.gz -> 압축을 풉니다. ]# cd freetype-2.2.1 -> 압축을 풀어 놓은 폴더로 이동합니다.
]# ./configure -> 환경에 맞추어 Makefile을 생성합니다. ]# make -> freetype 라이브러리를 설치합니다. freetype이 제대로 설치되면 /usr/include/freetype1과 /usr/include/freetype2 폴더가 생성됩니다. freetype2 로 freetype 링크를 만듭니다. ]# ln -s /usr/include/freetype2/freetype /usr/include/freetype 라이브러리 생성 후에는 freeype-2.2.1 디렉토리를 삭제하셔도 좋습니다.
freetype은 make를 실행하면 자동으로 /usr/include 디렉토리 안에 설치됩니다만 QT는 압축을 풀어 놓은 곳이 설치되는 장소이므로 압축을 QT 라이브러리를 사용하기 적당한 곳에 풀어 놓고 make 를 실행하는 것이 좋습니다.
본 강좌에서는 아래와 폴더에 맞추어 설치하겠습니다.
설치 내용 | 설치 장소 |
QT root | /qt |
QT/X11 - DQT | /qt/qtx-3 |
QT/X11 - QT2 | /qt/qtx-2 |
Arm용 QT/Embedded | /qt/qte-arm |
Arm용 QTopia | /qt/qpe-arm |
Embedded 별 QTopia Image | /qt/qpe-images |
Arm용 QTopia Image | /qt/qpe-images/arm |
ftp.trolltech.com 에서 아래의 파일을 내려 받습니다.
- /qt/source/qt-x11-free-3.3.8.tar.gz
- /qt/source/qt-x11-2.3.2.tar.gz
- /qt/source/qt-embedded-2.3.10-free.tar.gz
- /freebies/tmake/tmake-1.13.tar.gz
- /qtopia/source/qtopia-free-source-2.1.1.tar.gz
E2fsprogs Ext2 Filesystem Utilities 페이지를 방문한 후 페이지 중앙에 here 링크를 클릭해서 e2fsprogs-1.40.2.tar.gz를 내려 받습니다.
ftp.scarlet.be를 방문하여 pub/freeware/SOURCES/ 에서 jpeg 라이브러리, jpeg-6b.tar.gz 파일을 다운 받습니다.
]# cd / <- root 디렉토리로 이동 ]# mkdir qt <- /qt/ 디렉토리 생성
]# cd /qt <- /qt/ 디렉토리로 이동
]# tar zxvf /download/qt-x11-free-3.3.8.tar.gz <- /qt/에 압축 풀기
]# mv qt-x11-free-3.3.8/ qtx-3 <- QT/X11 3.3.8 풀기 완료 ]# tar zxvf /download/qt-x11-2.3.2.tar.gz <- /qt/에 압축 풀기
]# mv qt-2.3.2/ qtx-2 <- QT/X11 2.3.2 풀기 완료
]# tar zxvf /download/qt-embedded-2.3.10-free.tar.gz
]# mv qt-2.3.10/ qte-arm <- QT/Embedded 풀기 완료
]# tar zxvf /download/qtopia-free-source-2.1.1.tar.gz
]# mv qtopia-free-2.1.1/ qpe-arm <- qtopia 풀기 완료
]# tar zxvf /download/tmake-1.13.tar.gz
]# mv tmake-1.13/ tmake <- tmake 풀기 완료 ]# tar zxvf /download/e2fsprogs-1.40.2.tar.gz <- uuid lib 압축 풀기
]# tar zxvf /download/jpeg-6b.tar.gz <- jpeg 라이브러리
제가 사용하는 arm-linux-gcc 는 (주)FALINUX 에서 제공하는 페도라 코어 2, 코어 3 ARM GCC 3.4.3 버전이며 설치 완료 후에 arm-linux-gcc의 라이브러리와 헤더파일이 /usr/arm-linux 디렉토리에 저장되고 참조되므로 uuid 라이브러리와 jpeg 라이브러리는 /usr/arm-linux에 설치했습니다.
QT를 X11 용 외에도 Embedded 용까지 설치했으므로 각각의 환경에 맞추어 컴파일할 때 마다 필요한 환경으로 설정해 주어야 합니다. 필요할 때 타이핑하면 되지만 환경 파일을 만들어 두면 편리합니다.
]# cd /qt/e2fsprogs-1.40.2 ]# ./configure --prefix=/usr/arm-linux --host=i386 --target=arm --enable-elf-shlibs --with-cc=arm-linux-gcc ]# make ]# make install ]# make install-libs
uuid 라이브러리와 마찬가지로 /usr/arm-linux에 설치했습니다.
]# cd /qt/jpeg-6b ]# ./configure ]# vi Makefile 아래의 내용을 수정합니다. prefix = /usr -> prefix = /usr/arm-linux CC = cc -> CC= arm-linux-gcc AR = ar rc -> AR = arm-linux-ar rc AR2 = ranlib -> RANLIB = arm-linux-ranlib ]# make ]# make install-lib /usr/bin/install -c -m 644 jconfig.h /usr/arm-linux/include/jconfig.h /usr/bin/install -c -m 644 ./jpeglib.h /usr/arm-linux/include/jpeglib.h /usr/bin/install -c -m 644 ./jmorecfg.h /usr/arm-linux/include/jmorecfg.h /usr/bin/install -c -m 644 ./jerror.h /usr/arm-linux/include/jerror.h /usr/bin/install -c -m 644 libjpeg.a /usr/arm-linux/lib/libjpeg.a ]#
QT를 X11 용 외에도 Embedded 용까지 설치했으므로 각각의 환경에 맞추어 컴파일할 때 마다 필요한 환경으로 설정해 주어야 합니다. 필요할 때 타이핑해도 되지만 환경 파일을 만들어 두면 편리합니다.
즉, qtx-2로 작업한다면,
]# source qtx-2.env 를
qte-arm으로 작업한다면
]# source qte-arm.env
를 실행하시면 됩니다.
]# cd /qt ]# vi qtx-3.env #!/bin/bash QTEDIR=/qt/qte-arm QPEDIR=/qt/qpe-arm QTDIR=/qt/qtx-3 TMAKEDIR=/qt/tmake PATH=$QTDIR/bin:$PATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTEDIR QPEDIR QTDIR TMAKEDIR PATH LD_LIBRARY_PATH ]# vi qte-arm.env #!/bin/bash QTEDIR=/qt/qte-arm QPEDIR=/qt/qpe-arm QTDIR=$QTEDIR TMAKEDIR=/qt/tmake PATH=$QTDIR/bin:$PATH TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++ LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTEDIR QPEDIR QTDIR TMAKEDIR PATH TMAKEPATH LD_LIBRARY_PATH
]# source qte-arm.env -> QT/Embedded 환경으로 설정합니다. ]# cd $QTDIR -> /qt/qte-arm 으로 이동. ]# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools -> QTopia에서 필요한 파일을 복사 ]# ./configure -xplatform qws/linux-arm-g++ -qconfig qpe -system-jpeg -no-xft -qvfb -depths 8,16 라이센스에 yes Building on: linux-x86-g++-shared Building for: linux-arm-g++-shared Thread support..................... no Configuration...................... qconfig-qpe.h ]# make : Note: be sure to set $QTDIR to point to here or to wherever you move these directories. Enjoy! - the Trolltech team make[1]: Leaving directory `/qt/qte-arm' ]# cd lib ]# file libqte.so.2.3.10 libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), not stripped -> 이렇게 ARM 용 파일이 만들어 졌다면 OK
이제 마지막 관문입니다. QTopia만 설치하면 모든 설치 작업이 완료됩니다. QT/Embedded까지 고생해서 겨우 설치했는데, 막상 QTopia 설치에서도 에러를 만나니 참 힘들더군요.
]# source qte-arm.env ]# cd $QPEDIR arm 을 위한 qtopia를 만들기 위해 아래와 같이 파일을 복사합니다. ]# cp $QPEDIR/src/libraries/qtopia/custom-linux-generic-g++.h $QPEDIR/src/libraries/qtopia/custom-linux-arm-g++.h ]# cp $QPEDIR/src/libraries/qtopia/custom-linux-generic-g++.cpp $QPEDIR/src/libraries/qtopia/custom-linux-arm-g++.cpp ]# cp $QPEDIR/etc/defaultbuttons-generic.conf $QPEDIR/etc/defaultbuttons-arm.conf 설치 중 에러를 막기 위해 qtopia 소스를 수정합니다. ]# vi ./src/3rdparty/libraries/libavformat/grab.c전에 #include <linux/compiler.h> #include <linux/videodev.h> ]# vi ./src/applications/camera/videocaptureview.cpp 역시를 삽입합니다. 전에 #include <linux/compiler.h> #include <linux/videodev.h> 이제 QTopia 를 설치합니다. ./configure 를 실행해야 하는데, 시간이 좀 걸립니다. 제 경우 10분 정도. ]# ./configure -xplatform linux-arm-g++ -edition pda -no-qtopiadesktop -prefix /qt/qpe-images/arm 앞서 말씀드렸습니다만 제가 사용하는 리눅스가 Virtual PC 2007에서 사용하기 때문인지는 모르겠습니다만, 텔넷에서 make 를 실행하면 꼭 오류가 발생했습니다. 에러 내용은, /qt/qpe-arm/lib/libqtopia.so: undefined reference to `uuid_generate' 이렇게 오류가 발생했을 때에 /usr/arm-linux/lib 에 들어가서 ls 명령을 실행하면 파일 목록이 보이지 않고 아래와 같이 에러가 나더군요. [root@jwCentOS lib]# ls -al ls: error while loading shared libraries: librt.so.1: ELF file OS ABI invalid 이 에러 때문에 한참 고생했습니다. 그러나 텔넷이 아닌 시스템의 터미널에서 make 를 실행하니 정상적으로 설치가 되었습니다. ]# make 저 같은 경우 1시간 정도 걸리네요. 설치 완료 화면입니다. ]# make install install 완료 화면입니다. install 까지 완료되면 /qt/qpe-images/arm 에 arm 보드용 이미지 파일이 생성됩니다. 이 이미지 파일을 통째로 arm 보드에 복사하시면 됩니다. 이 arm용 qpe에서도 jpeg 와 uuid 라이브러리를 사용할 수 있도록 라이브러리를 복사합니다. ]# cd /qt/qpe-images/arm/lib ]# cp /usr/arm-linux/lib/libuuid.* . ]# cp /usr/arm-linux/lib/libjpeg.* .를 삽입합니다.
이제 arm 보드에 /qt/qpe/images/qrm을 통째로 복사해서 arm/qpe에 있는 qpe를 실행해 보겠습니다. Window X11에 대해서는 qvfb라면 임베디드 보드에 그래픽을 운영하는 바탕이 qpe 입니다.
제가 가지고 있는 arm 보드가 EZ-X5와 ESP-MMI입니다. 제가 LCD패널이 없기 때문에 ESP-MMI를 이용하여 qpe를 실행해 보도록 하겠습니다. ESP-MMI는 보드 내에 일반 모니터로 출력할 수 있는 기능이 있어서 개발하거나 학습하기가 매우 편합니다. 임베디드 보드가 없는 분께는 EZ-X5보다는 ESP-MMI를 권하고 싶습니다.
arm 보드에서도 qpe 실행을 위해 환경 변수값을 등록해 주어야 합니다. /etc/profile에 내용을 추가하시거나 보드에 qpe.env 를 만들어서 필요할 때 source 를 실행하시면 되겠습니다.
환경 설저을 위한 파일을 생성합니다. ]# cd /qt/qpe-images/arm ]# vi qpe.env #!/bin/bash
QPEDIR=/app/qpe
QTDIR=$QPEDIR
PATH=$QTDIR/bin:$PATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QPEDIR QTDIR PATH LD_LIBRARY_PATH
arm-board에 이미지를 복사해 주기 위해 nfs 공유 폴더로 arm용 이미지를 복사해 줍니다. ]# cp -r /qt/qpe-images/arm/ /공유폴더/qpe 이제 arm-board 를 부팅하고 Host PC와 nfs로 연결합니다. [이 부분부터는 arm-board에서의 작업 내용입니다.] ]$ mount -t nfs -o nolock 192.168.10.50:/공유폴더 /mnt/nfs ]$ cp -r /mnt/nfs/qpe /app ]$ cd /app/qpe ]$ source qpe.env ]$ ./bin/qpe &
ESP-MMI보드에서 qpe 가 실행되는 모습입니다.
결언
한번에 설치를 완료하시는 분들도 많은데, 아직 초보라서 QTopia를 설치하는데에만 벌써 며칠을 소모했습니다. 고생한 만큼 더 자세하게 글을 올리고 싶어서 두차례나 더 설치해 보고 내용을 수정했습니다만 역시 모자른 부분이 많아 아쉽네요.
그러나 QTopia에 대한 얘기를 계속 올릴 것이므로 그때그때 내용을 보충하도록 하겠습니다. qpe에 있는 샘플 프로그램을 컴파일해서 그 실행하면도 보여 드리고 싶었는데 아쉽게도 컴파일 에러가 나네요. X11용은 이상없이 컴파일이 되었는데 말이죠. 또 하나의 고개를 또 넘어야 겠습니다. ^^
본 게시글을 보시고 틀린 부분을 지적해 주시거나 조언을 해 주시면 감사하겠습니다. 또한 앞으로 QTopia에 대한 강좌도 관심있게 봐 주시면 감사하겠습니다. ^^
폴더에 맞추어 세팅해 주셨나요?
다시 말씀드려 임베디드 보드에 라이브러리를 복사하시고,
라이브러리 위치에 맞추어 아래의 파일을 만들어 source 명령을 이용하시거나
]# vi qpe.env
#!/bin/bash
QPEDIR=/app/qpe
QTDIR=$QPEDIR
PATH=$QTDIR/bin:$PATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QPEDIR QTDIR PATH LD_LIBRARY_PATH
아니면 export 로 QT에 대한 환경 변수 값을 설저하시고 실행하셨는지요?
자세한 글은 http://forum.falinux.com/zbxe/?mid=qt&page=2&document_srl=406292 글에서
하단에 "arm 보드에서 QTopia 실행" 부분을 참고하세요.
그래서 디자이너사용법 글보고 따라했는데 라벨문자 변환버튼쪽에서 에러까지 납니다.
당연히 보드에서는 꿈조차 못 꾸고 이글 따라해도 ARM용으로 qmake하면 Project LOAD():Feature qt_config connot bo found 라는 메시지 뜨네요
LCD띄우기가 이렇게 힘들줄은.....