이전 시간에 QT - 개발환경 구축에 대한 글을 올렸습니다만 오래 전에 작성된 것이라 최근 QT 라이브러리와 버전차이가 많아서 최근 버전을 다시 설치하면서 좀더 자세하게 설명을 드리려 합니다. 무엇 보다도 QT - 개발환경 구축 글에 소개된 QT 버전은 최근의 3.4 이상 버전의 gcc로 컴파일을 하게 되면 이상한 컴파일 에러가 발생합니다.

In file included from kernel/qt.h:32,
from allmoc.cpp:16:
/qt/qte/include/qstring.h: In member function `uchar& QChar::cell()':
/qt/qte/include/qstring.h:166: error: cannot bind packed field `((QChar*)this)->QChar::cl' to `uchar&'
/qt/qte/include/qstring.h: In member function `uchar& QChar::row()':
/qt/qte/include/qstring.h:167: error: cannot bind packed field `((QChar*)this)->QChar::rw' to `uchar&'
In file included from kernel/qt.h:62,
from allmoc.cpp:16:
/qt/qte/include/qsortedlist.h: In destructor `QSortedList::~QSortedList()':
/qt/qte/include/qsortedlist.h:51: error: there are no arguments to `clear' that depend on a template parameter, so a declaration of `clear' must be available
/qt/qte/include/qsortedlist.h:51: error: (if you use `-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
make[1]: *** [allmoc.o] 오류 1
make[1]: Leaving directory `/qt/qte/src'
make: *** [sub-src] 오류 2

에러가 발생한 이유가 재밌습니다. gcc 컴파일러 버전이 2.9.x 버전에서는 이상없는데, 3.4.x 버전부터 표준 문법을 더 잘 지키다 보니(?) 발생하는 문제라고 합니다. 예로, base::fuc() 을 this->fun()으로 바꾸면 된다는데, 이건 뭐 알아도 감당이 되어야 말이죠.

엉뚱한 문제로 고생하기 보다는 차라리 최근 버전 설치에 도전하기로 했습니다. 역시나 쉽지 않네요. 문제가 발생할 때 마다 웹 검색에 의존했는데 하루만에 설치하신 분도 계셔서 며칠 째 고생하는 저로서는 매우 부러웠습니다.

특히 KorOne.Net최민석님께서 올려 주신 "Qtopia-2.1.1 설치 문서입니다"의 문서를 바탕으로 QT를 설치할 수 있었습니다. 또한 설치 중에 난감한 오류로 더 진행할 수 없었을 때, 업무로 바쁘실 텐데, 계속 조언을 해주시고 문제 해결에 큰 도움을 주신 (주)FALINUX사의 유영창이사님께 감사의 말씀을 올립니다.

설치 중 주의 사항

텔넷 보다는 시스템에서 직접 설치를 하십시오.

제가 Virtual PC 2007에서 리눅스를 사용해서인지는 모르겠습니다만 텔넷으로 설치를 하다 보니까 이상하게 설치 오류가 발생하더군요. 쉘에서 명령을 내리기 전에 항상 명령 문장을 따로 정리하면서 작업했기 때문에 여러 번 반복 할 수 있었습니다.

혹 라이브러리의 버전 문제인가해서 e2fsprogs 같은 경우 1.40.2 에서 1.36으로, tmake 같은 경우 1.11과 1.13, QT/X는 3.3.4와 3.3.8, 그리고 다른 파일의 버전을 바꾸어 가면서 설치해 보았으나 역시 설치 중 에러가 발생했습니다.

특히 QTopia 를 설치할 때,

cd games/fifteen && make -f Makefile
make[4]: Entering directory `/qt/qpe-arm/src/games/fifteen'
make[5]: Entering directory `/qt/qpe-arm/src/games/fifteen'
arm-linux-g++ -o fifteen .obj/release-shared/fifteen.o .obj/release-shared/main.o .obj/release-shared/moc_fifteen.o -L/usr/local/arm/2.95.3/arm-linux/include/uuid/ -ljpeg -lqtopia2 -lqtopia -lqpe -L/qt/qpe-arm/lib -L/root/qt/qte-2.3.10//lib -lqte
/usr/local/arm/2.95.3/arm-linux/bin/ld: warning: libuuid.so.1, needed by /qt/qpe-arm/lib/libqpe.so, not found (try using -rpath or -rpath-link)
/qt/qpe-arm/lib/libqtopia.so: undefined reference to `uuid_generate'
collect2: ld returned 1 exit status
make[5]: *** [fifteen] 오류 1
make[5]: Leaving directory `/qt/qpe-arm/src/games/fifteen'
make[4]: *** [all] 오류 2
make[4]: Leaving directory `/qt/qpe-arm/src/games/fifteen'
make[3]: *** [sub-games-fifteen] 오류 2
make[3]: Leaving directory `/qt/qpe-arm/src'
make[2]: *** [sub-src-components_pro] 오류 2
make[2]: Leaving directory `/qt/qpe-arm/src'
make[1]: *** [all] 오류 2
make[1]: Leaving directory `/qt/qpe-arm/src'
make: *** [all] 오류 2

이 문제 때문에 매우 고생했는데 이 문제로 많은 분들이 고생하시더군요. 웹 검색으로 많은 질문이 올라와 있었습니다만 답변이 될 만한 내용은 멈추지마라 블로그:: Qtopia 설치 글이었습니다. 이 분이 해결한 방법은,

]# ln -s libuuid.so libuuid.so.1

이었습니다. 그러나 저는 libuuid.so.1 이 이미 정상적으로 생성되어 있었습니다. 글 내용이 저의 경우가 아닙니다만 다른 분들께 도움이 될 수 있어서 소개드립니다.

참 난감했습니다. 그러다 결국 예전에 Windows-XP 원격 데스크탑에서 설치 작업을 하다 실패한 경험이 있어서 텔넷이 아닌 시스템 내에 있는 터미널로 똑 같이 작업했더니 이상없이 설치를 완료할 수 있었습니다.

얼마나 기뻣는지 모릅니다. ^^ 그러므로 가급적 설치 작업을 텔넷 보다는 시스템에서 직접 작업하시기를 권합니다. 타이핑하기 어려운 ./configure 같은 경우 텔넷에서 하셔도 좋습니다. 그러나 make 명령 만은 꼭 시스템의 터미널에서 실행하십시오.

개발용 PC 환경

저의 개발용 PC는 아래와 같습니다.

  • CentOS 4
  • 커널 버전 : 2.6.9
  • gcc 버전 : 3.4.6
  • arm-linux-gcc : 3.4.3
  • arm-linux-g++ : 3.4.4

앞으로 모든 작업은 root 계정으로 진행하겠습니다. 참고로 커널 버전을 확인하시려면 uname -a 를 실행하십시오.

]# uname -a
Linux CentOS 2.6.9-42.0.8.ELsmp #1 SMP Tue Jan 30 12:33:47 EST 2007 i686 i686 i386 GNU/Linux
]#

gcc 버전 번호는 gcc --version으로 확인하십시오. - 가 2개입니다.

]# gcc --version
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

]#

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
DQTDIR=/qt/qtx-3
QT2DIR=/qt/qtx-2
QTEDIR=/qt/qte-arm
QPEDIR=/qt/qpe-arm
TMAKEDIR=/qt/tmake
QTDIR=$DQTDIR
PATH=$QTDIR/bin:$PATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export DQTDIR QT2DIR QTEDIR QPEDIR TMAKEDIR QTDIR PATH LD_LIBRARY_PATH 
]# vi qtx-2.env
#!/bin/bash
DQTDIR=/qt/qtx-3
QT2DIR=/qt/qtx-2
QTEDIR=/qt/qte-arm
QPEDIR=/qt/qpe-arm
TMAKEDIR=/qt/tmake
QTDIR=$QT2DIR
PATH=$QTDIR/bin:$PATH
TMAKEPATH=$TMAKEDIR/lib/linux-g++
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export DQTDIR QT2DIR QTEDIR QPEDIR TMAKEDIR QTDIR PATH TMAKEPATH LD_LIBRARY_PATH
]# vi qte-arm.env
#!/bin/bash
DQTDIR=/qt/qtx-3
QT2DIR=/qt/qtx-2
QTEDIR=/qt/qte-arm
QPEDIR=/qt/qpe-arm
TMAKEDIR=/qt/tmake
QTDIR=$QTEDIR
PATH=$QTDIR/bin:$PATH
TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export DQTDIR QT2DIR QTEDIR QPEDIR TMAKEDIR QTDIR PATH TMAKEPATH LD_LIBRARY_PATH

QT-X11 3.3.8 설치

]# source qtx-3.env
# echo $QTDIR             -> /qt/qtx-3 라고 나오는지 확인합니다.
]# cd $QTDIR              -> /qt/qtx-3 로 이동

            만일 cd $QTDIR을 실행했는데 이동하지 못하고 에러가 발생한다면
            윈도즈에서 qtx-3.env 파일을 만들어서 리눅스에 복사했기 때문입니다.
UNIX 타입으로 변경하여 저장하거나 vi 에리터로 직접 작성하십시오. QT 설치를 빠르게 하기 위해서 Makefile의 14행 내용 중에 sub-tutorial과 sub-examples를 삭제합니다. ]# vi Makefile
14 행에 있는 symlinks 에서 sub-tutorial과 sub-examples를 삭제합니다. all: symlinks src-moc src-mt sub-src sub-tools sub-tutorial sub-examples -> all: symlinks src-moc src-mt sub-src sub-tools vi에서 set nu 명령을 이용하면 행 번호가 보이므로 편리합니다. ]# ./configure -fast -thread 라이센스에 대해 yes 입력합니다. ]# make sub-src sub-src로 예제를 제외한 소스코드만 컴파일하게 했기 때문에 Enjoy! - the Trolltech team 문구가 출력되지 않습니다. 대신에 에러없이 make[1]: Leaving directory `/qt/qtx-3/src' 이 나오면 성공 제 PC로는 약 40분 정도 걸리더군요. ^^; ]# cd tools/linguist/lrelease/ ]# make ]# cd ../lupdate/ ]# make ]# cd ../../designer/uilib/ ]# make ]# cd ../uic/ ]# make

QT-X11 2.3.2 설치

]# source qtx-2.env
]# cd $QTDIR              -> /qt/qtx-2 로 이동

QT 설치를 빠르게 하기 위해서 Makefile의 14행 내용 중에 sub-tutorial과 sub-examples를 삭제합니다.

]# vi Makefile
11행에 있는 symlinks 에서 sub-tutorial과 sub-examples를 삭제합니다. all: symlinks src-moc src-mt sub-src sub-tools sub-tutorial sub-examples -> all: symlinks src-moc src-mt sub-src sub-tools ]# ./configure -no-xft 라이센스에 대해 yes 입력합니다. ]# make <- make sub-src 가 아닙니다. ^^ 만들어진 uic 를 qte-arm의 bin 디렉토리에 복사합니다. ]# mkdir $QTEDIR/bin ]# cp bin/uic $QTEDIR/bin

QVFB 설치

]# cd $QTEDIR/tools/qvfb
]# $TMAKEDIR/bin/tmake -o Makefile qvfb.pro
]# make
]# cp qvfb $QTEDIR/bin/

이제 $QTEDIR/bin 에는 qvfb  uic 가 생성되어 있습니다.

]# ls -al $QTEDIR/bin
합계 500
drwxr-xr-x 2 root root 4096 8월 22 12:08 .
drwxr-xr-x 14 507 users 4096 8월 22 12:00 ..
-rwxr-xr-x 1 root root 217381 8월 22 12:08 qvfb
-rwxr-xr-x 1 root root 272125 8월 22 12:01 uic ]#

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 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 설치에서도 에러를 만나니 참 힘들더군요.

가장 기억에 남는 것이 바로 요 에러입니다. 물론 설치가 중단되죠.

/usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/sys-include/linux/videodev2.h:436: error: parse error before '*' token /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/sys-include/linux/videodev2.h:438: error: parse error before '*' token /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/sys-include/linux/videodev2.h:439: error: parse error before '}' token /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/sys-include/linux/videodev2.h:810: error: field `win' has incomplete type In file included from mvc.c:37: /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/include/videodev.h:225: error: parse error before '*' token /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/include/videodev.h:226: error: conflicting types for 'clipcount' /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/sys-include/linux/videodev2.h:437: error: previous declaration of 'clipcount' was here /usr/lib/gcc/arm-linux/3.4.3/../../../../arm-linux/include/videodev.h:232: error: parse error before '}' token

정말 황당해서 어떻게 처리해야될지 몰라 난감했습니다. 그러나 다행이 (주)FALINUX의 유영창이사님께서 컴파일러가 만들어진 시점의 커널 소스와 QT 프로그램이 만들어 질 때의 커널 소스의 차이로 발생하는 문제라며, 436: error: parse error before '*' token 에서 말을 해 주듯이 '*' token 앞에 있는 키워드에 대해 컴파일러가 알 수 있도록 소스를 수정하라는 도움 말씀을 주셨습니다.

문제의 행에 '*"의 앞은 __user 라는 문장이 있었고, 이 문장을 검색해 보니 compiler.h 에 있네요. 해서 videoodev.h 헤더 파일을 사용하는 모든 파일에 대해 compiler.h 를 추가해서 문제를 해결할 수 있었습니다.

]# 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 
#include 

]# vi ./src/applications/camera/videocaptureview.cpp

   역시  전에 를 삽입합니다.

#include 
#include 

   이제 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용 이미지를 복사해 줍니다. arm 보드에 cp 명령으로 복사해 주면 링크된 파일 때문에 사이즈가 커지므로 압축해서 넘겨 줍니다. ]# tar zcvf /공유폴더/qpe.tar.gz /qt/qpe-images/arm 이제 arm-board 를 부팅하고 Host PC와 nfs로 연결합니다. [이 부분부터는 arm-board에서의 작업 내용입니다.] ]$ mount -t nfs -o nolock 192.168.10.50:/공유폴더 /mnt/nfs ]$ tar zxvf /mnt/nfs/qpe.tar.gz ]$ mv arm qpe ]$ cd /app/qpe ]$ source qpe.env ]$ ./bin/qpe &

ESP-MMI보드에서 qpe 가 실행되는 모습입니다.

결언

한번에 설치를 완료하시는 분들도 많은데, 아직 초보라서 QTopia를 설치하는데에만 벌써 며칠을 소모했습니다. 고생한 만큼 더 자세하게 글을 올리고 싶어서 두차례나 더 설치해 보고 내용을 수정했습니다만 역시 모자른 부분이 많아 아쉽네요.

그러나 QTopia에 대한 얘기를 계속 올릴 것이므로 그때그때 내용을 보충하도록 하겠습니다. qpe에 있는 샘플 프로그램을 컴파일해서 그 실행하면도 보여 드리고 싶었는데 아쉽게도 컴파일 에러가 나네요. X11용은 이상없이 컴파일이 되었는데 말이죠. 또 하나의 고개를 또 넘어야 겠습니다. ^^

본 게시글을 보시고 틀린 부분을 지적해 주시거나 조언을 해 주시면 감사하겠습니다. 또한 앞으로 QTopia에 대한 강좌도 관심있게 봐 주시면 감사하겠습니다. ^^

태그: *QT *그래픽