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 라이브러리가 없으면 아래의 순서에 따라 설치해 주십시오.

  1. The FreeType Project 홈페이지를 방문합니다.
  2. Download 링크에서 freetype 라이브러리를 다운받습니다.
  3. 글을 작성하는 지금 freetype 2.2.1 버전이라 freetype-2.2.1.tar.gz을 내려 받았습니다.
  4. 이 파일을 적당한 곳에 내려 받아 풀기를 합니다. 라이브러리 설치 후에 삭제해도 되는 파일이므로 적당한 곳에 풀어 놓고 작업하시면 됩니다.
]# 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 디렉토리를 삭제하셔도 좋습니다.

QT 설치 디렉토리

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 용 uuid 라이브러리 설치

제가 사용하는 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

arm 용 jpeg 라이브러리 설치

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

QT-Embedded 설치

]# 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 설치

이제 마지막 관문입니다. 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 보드에서 QTopia 실행

이제 arm 보드에 /qt/qpe/images/qrm을 통째로 복사해서 arm/qpe에 있는 qpe를 실행해 보겠습니다. Window X11에 대해서는 qvfb라면 임베디드 보드에 그래픽을 운영하는 바탕이 qpe 입니다.

제가 가지고 있는 arm 보드가 EZ-X5ESP-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에 대한 강좌도 관심있게 봐 주시면 감사하겠습니다. ^^