그래픽 & 멀티미디어
안녕하세요. QT 를 시작한지 얼마 안되는데, 이렇게 강좌에 글을 올려도 되는지 모르겠습니다....^^;;
처음 QT 를 대할 때, 설치부터 막혀서 고생했었습니다. 여기 저기 웹검색을 통해 결국 설치했습니다만, 몇 일 동안 고생했기 때문에, 혹 다른 분들께 도움이 되드리지 않을까해서 용기내어 올립니다.
아래의 글은 저 혼자 스스로 터득한 내용이 아니라 웹 검색을 통해 여기 저기에서 얻은 정보를 가지고 설치한 경험기임을 말씀드립니다.
QT 를 설치하시려면, 파일을 구해야 하는데요, QT 는 버전별로 궁합이 맞는 버전들이 있습니다. 너무 최신 버전만을 고집하지 마시고, 웹 검색을 통해 가장 안정하고 권장하는 버전을 설치하시기 바랍니다.
여기에서는,
QT/X11 2.3.2 QT/Embedded 2.3.7 QTopia 1.70
을 가지고 진행하겠습니다. 그럼 파일 구하기 부터 말씀을 드리겠습니다.
■ 파일 구하기 |
/qt/source/qt-x11-2.3.2.tar.gz/qt/source/qt-embedded-2.3.7.tar.gz/freebies/tmake/tmake-1.13.tar.gz
/qtopia/source/qtopia-free-1.7.0.tar.gz
e2fsprogs-1.38.tar.gz
http://ftp.scarlet.be/pub/freeware/SOURCES/jwpg-6b.tar.gz에서
jpeg-6b.tar.gz
■ 설치 전 주의 사항 |
- qt 는 make install 과정이 없다. 압축을 풀고, make 하는 곳이 곧 설치 장소가 되므로, 적당한 곳에 풀어 놓는다.
여기서는 아래의 폴더에 맞추어 설치된다.
QT root /qt QT/X11 /qt/qtx QT/Embedded /qt/qte QTopia /qt/qpe
- qt 를 설치하기 위해서는 freetype
라이브러리 버전 2 이상이 필요하다.
우선 /usr/include 에 freetype 폴더가 있는지 확인한다.
if 없다면
freetype2 폴더, 즉 freetype 버전 2가 있는지 확인한다. freetype 버전 1은 안된다.
if 없다면
freetype 라이브러를 구해 설치한다.
else
ln -s /usr/include/freetype2/freetype /usr/include/freetype
-> /usr/include/freetype 가 설치된 환경으로 만들어 준다.
- 설치할 qt 버전은
QT/X11 2.3.2 QT/Embedded 2.3.7 QTopia 1.70
이다, 그러나 QTopia 2.x.x. 버전대를 설치한다면 QT/Embedded 를 2.3.10 이상 버전을 사용해야 한다.
기껏 QT/X11, QT/Embedded 를 설치했다가 QTopia 에서 버전 에러가 나면 정말 황당하다.
- qtopia 를 설치할 때, qtopia 의 lib 폴더를 미리 LD_LIBRARY_PATH 에 등록해서는 절대 안된다.
qtopia 가 설치될 때, 아직 설치 전인 상태에서 qtopia lib 폴더 안에있는 라이브러리를 참조하게되고,
make 시에 엉뚱하게,
.obj/linux-armg++//moc_appeearancesettingsbase.o -lqpe -lqtopia -lqte -lm /opt/arm-linux/bin/ld:
cannot find -lqtopia
clooect2: ld returned 1 exit status
라며 에러를 낸다.
- 작성한 임베디드 프로그램을 P.C. 에서 테스트, 즉 이뮬레이션을 이용하기 위해서는 QT/Embedded 와 qtopia 를 크로스 플랫폼으로 설치하면 안된다.
즉, ./configure 에서 옵션으로 x-platform linux-arm-g++ 을 사용하면 p.c. 에서 실행해 볼 수 없다.
- 임베디드 프로그램을 P.C. 에서 테스트하려면, 즉 프레임버퍼를 이용한 이뮬레이션을 하려면,
- QT/X11 이 설치되어 있는 폴더안에 /tools/qvfb 안으로 이동하여
- make 로 qvfb 를 생성하고,
- QT/X11 폴더의 bin 폴더에 옮겨 놓는다.
- 작성한 임베디으 프로그램을 실행하기 전에 qvfb 를 실행하고,
# qvfb -width 640 -height 480 -depth 16
- 실행할 프로그램에 -qws 옵션을 함께 주어 실행한다.
./hello -qws
■ 설치 준비 |
# mkdir /qt# cd /qt# tar zxvf /root/download/qt-x11-2.3.2.tar.gz# tar zxvf /root/download/qt-embedded-2.3.7.tar.gz# tar zxvf /root/download/qtopia-free-1.7.0.tar.gz# tar zxvf /root/download/tmake-1.13.tar.gz# tar zxvf /root/download/e2fsprogs-1.38.tar.gz
# tar zxvf /root/download/jpeg-6b.tar.gz
위의 글을 보시면 /qt 라는 폴더에 모든 파일을 다운 받아 놓고 한번에 풀어 놓고 있습니다.
아래의 설치 설명을 보시면 바로 아시겠습니다만, 작업 단위로 나누어서 설명을 드리는 것이 글이 복잡하지 않을 것 같아서 정리하듯 적었습니다.그러나 주의 하실 것은 qt-embedded 와 qt-x11 을 같은 버전으로 설치하신다면, 압축을 푸시고, 바로 폴더 이름을 변경해 주셔야 합니다.
이유는 qt-embedded 와 qt-x11 모두 버전이 포함된 폴더 이름을 압축이 풀리는데, 둘 모두 같은 버전이라면 같은 폴더에 풀리기 때문입니다.
이점 유의하세요.
# mv qt-2.3.2 qtx# mv qt-2.3.7 qte# mv qtopia-free-1.7.0 qpe# mv tmake-1.13 tmake# mv e2fsprogs-1.38 uuid_lib# mv jpeg-6b jpeg
# vi qtx.env#!/bin/bash
QTDIR=/qt/qtx
PATH=$QTDIR/bin:$PATH
TMAKEDIR=/qt/tmake
TMAKEPATH=$TMAKEDIR/lib/linux-g++
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH TMAKEDIR TMAKEPATH LD_LIBRARY_PATH# vi qte.env#!/bin/bash
QTDIR=/qt/qte
QPEDIR=/qt/qpe
TMAKEDIR=/qt/tmake
TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
MANPATH=$QTDIR/doc/man:$MANPATH
PATH=$QTDIR/bin:$TMAKEDIR/bin:$PATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR QPEDIR TMAKEDIR TMAKEPATH PATH LD_LIBRARY_PATH
■ QT-X11 설치 |
-
# source qtx.env
# echo $QTDIR -> /qt/qtx 라고 나오는지 확인한다. - # cd $QTDIR
-
# vi Makefile
설치시간을 벌기 위해, Makefile 의 11 행에 있는 symlinks 에서 sub-tutorial 과 sub-examples 를 삭제한다.
-
# ./configure
라이센스에 대해 yes 입력 -
# make
-
몇 십분 후에 컴파일과 설치가 정상적으로 끝나면
Enjoy! - the Trolltech team
문구가 보인다.
...............................임베디드 프로그램을 위해 QVFB 를 설치한다. ..........................
-
# cd /qt/qtx/tools/qvfb
# make
# cp qvfb /qt/qtx/bin
■ QT-Embedded 설치 |
-
qt embedded 환경을 설정한다.
# source qte.env
- 설치 디렉토리로 이동
# cd $QTDIR
-
필요한 파일을 복사한다.
# cp /qt/qtx/bin/uic .bin/
# cp /qt/qpe/src/qt/qconfig-qpe.h /qt/qte/src/tools/
-
# ./configure -xplatform linux-arm-g++ -qconfig
-qpe
라이센스 질문에 yes, 칼라 뎁스에 16, Framebuffer 사용에 yes(엔터) 를 선택한다.
아래의 화면 내용을 확인한다.
- Building on : linux-x86-g++-shared
- Building for : linux-arm-g++-shared
- Thread support................................ no
- Configuration...................................
qconfig-qpe.h
- # make sub-src -> 예제를 제외한 소스코드만 컴파일하도록 한다.
-
sub-src 를 사용했기 때문에 마지막에 Enjoy! - the Trolltech team
문구가 없이 나감 '/qt/qte/src' 디렉토리 라고만 나온다. 제대로 설치되었는지 확인하기 위해 생성된
library 를 확인한다.
# cd lib
# ls -l
libqte.so -> libqte.so.2.3.7
libqte.so.2 -> libqte.so.2.3.7
libqte.so.2.3 -> libqte.so.2.3.7
libqte.so.2.3.7
# file libqte.so.2.3.7
ELF 32-bit LSB ...... ARM ..... --> arm 용으로 만들어 졌으면 일단 O.K.
- ---------------------------------------------------------------
uuid 를 설치한다.
---------------------------------------------------------------
# cd /qt/uuid_lib - # ./configure
- # cd lib/uuid
- # vi Makefile
prefix = /usr -> prefix = /qt/qpe
CC = cc -> CC= arm-linux-gcc
BUILD_CC = cc -> BUILD_CC = arm-linux-gcc
AR = ar -> AR = arm-linux-ar
RANLIB = ranlib -> RANLIB = arm-linux-ranlib
362 행부터 372 행을 삭제(주석처리) 한다.
for i in $(SMANPAGES); DO ...
.............
$(LN) -f $(DESTDIR)....../uuid_generate_time.3
- # make
- # make install
- ---------------------------------------------------------------
jpeg 라이브러리를 설치한다.
---------------------------------------------------------------
# cd /qt/jpeg - # ./configure
- # vi Makefile
prefix = /usr -> prefix = /qt/qpe
CC = cc -> CC= arm-linux-gcc
AR = ar rc -> AR = arm-linux-ar rc
AR2 = ranlib -> RANLIB = arm-linux-ranlib
- # make
- # make install-lib
- ---------------------------------------------------------------
qtopia 를 설치한다.
---------------------------------------------------------------
# cd /qt/qpe - # cd src
- # ./configure -xplatform linux-arm-g++
- # make
별다른 메시지가 없고, 나감 '/qt/........../keypebble' 디렉토리 라고 출력된다.
태그: *QT *그래픽
{standard input}:2: Warning: Unrecognized .section attribute: want a,w,x
{standard input}:2: Warning: Unrecognized .section attribute: want a,w,x
{standard input}:2: Error: Rest of line ignored. First ignored character is `,'.
make[1]: *** [allmoc.o] Error 1
이런 에러가 나는군요... 해결방안이 없는지요?