====== 개발환경 구축하기 - 1.X86 기반의 QT ======
개발 PC 에 X86 플랫폼 기반의 개발환경을 구축하는 방법을 설명하고 있다.
이것은 순전히 개발 목적이 아닌 개인적인 연구 목적이라는 것을 밝혀둔다. 참고로 개발은 크로스 컴파일 환경에서 수행한다.
본격적으로 시작하기전에 아래의 사항들을 확인해보기 바란다.
| OS | Debian Sarge 3.1_r2 |
| GCC | 3.3.5 |
| KERNEL | 2.6.8-2-386 |
| QT | qt-embedded-free-3.3.3.tar.bz2, qt-x11-free-3.3.3.tar.bz2 |
| 설치경로 | /opt |
데비안에서 QT 관련한 패키지가 여러개 있지만, 패키지 방식의 단점이라고 할 수 있는 어디에 어떻게 설정이 되었는지 자칫 혼란을 줄 수 있는 관계로 source 로 설치하기로 했다. 다음의 주소에서 다운로드 받는다.
ftp://ftp.trolltech.com/qt/source/
====== 컴파일 및 설치하기 (QT/X11) ======
QT/X11 을 컴파일하고 설치하는 이유는 단 한가지다. qvfb 가 필요해서이다. 차후에 QT/Embedded 를 사용하기 위해서는 qvfb 가 반드시 필요하다.
/opt 디렉토리에 앞에서 다운받은 파일들을 복사한다.
#tar xjf qt-x11-free-3.3.3.tar.bz2
#mv qt-x11-free-3.3.3 qtx-3.3.3
/etc/profile 을 열어서 다음을 추가한다.
QTDIR=/opt/qtx-3.3.3
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
저장한 후에 이 환경변수들을 적용한다.
#source /etc/profile
#cd /opt/qtx-3.3.3
#./configure
라이센스를 물어보면 'yes'라고 입력한다.
컴파일을 할 때, 시간이 오래 걸릴수가 있으므로 필요한 것만 컴파일한다.
Makefile 의 14번째 줄을 수정한다.
all: symlinks src-qmake src-moc sub-src sub-tools // 나머지는 삭제
그리고 나서, 컴파일을 한다.
#make
===== 주의 사항 =====
만일 도중에 다음과 같은 에러가 발생했다면,
kernel/qt_x11.h:71:23: X11/Xutil.h: 그런 파일이나 디렉토리가 없음
kernel/qt_x11.h:72:21: X11/Xos.h: 그런 파일이나 디렉토리가 없음
kernel/qt_x11.h:73:23: X11/Xatom.h: 그런 파일이나 디렉토리가 없음
Xlibs 패키지가 설치안되었기 때문이다. 설치해주면 된다.
#apt-get install xlibs-dev
설치후에 다시 컴파일한다.
무사히 컴파일되었으면 성공이다. 여기서 우리가 필요한 것은 qvfb 이므로 tools/qvfb 아래에 실행파일 'qvfb' 파일이 생성되었는지 확인한다. 만일 생성되지 않았다면, 컴파일 해준다.
#cd /opt/qtx-3.3.3/tools/qvfb
#make
이제 실행파일이 생겼다. PATH 문제 때문에 qvfb 실행파일을 /usr/bin 아래로 복사한다.
#cp qvfb /usr/bin
#cd
#qvfb -depth 16 &
윈도우 창이 뜬다면 성공이다.
====== 컴파일 및 설치하기 (QT/Embedded) ======
본격적인 컴파일에 앞서 /etc/profile 을 다음과 같이 수정한다.
QTDIR=/root/qt/qte-3.3.3 // 한줄만 수정하면 된다
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
이제 다음을 실행하자!
#cd /opt
#tar xjf qt-embedded-free-3.3.3.tar.bz2
#mv qt-embedded-free-3.3.3 qte-3.3.3
#echo $QTDIR
/opt/qte-3.3.3
#cd $QTDIR
#./configure -shared -thread -no-cups -qvfb -no-ipv6 -qt-mouse-linuxtp
라이센스에 동의하느냐고 물어볼때 'yes' 라고 답하고 depth를 물어보면 3.16 bits 를 선택한다.
그리고 나서 컴파일 한다.
#make
에러없이 컴파일 되었다면, 90% 이상은 성공이다. 간단한 예제 프로그램을 통해 확인해보자!!
#include
#include
class MyWidget : public QWidget
{
public:
MyWidget();
};
MyWidget::MyWidget()
{
setCaption("Hello World");
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyWidget mw;
app.setMainWidget(&mw);
mw.resize(150, 100);
mw.show();
return app.exec();
}
파일 이름은 main.cpp 이다.
#qmake -project main.pro
#qmake -makefile
#make
#./test
화면에 Hello World 라는 창이 하나 뜰 것이다.
====== 달라진 것들 ======
QT 가 3.x 대에 들어오면서 바뀐 것이 qmake 의 등장이다. 2.x 에서는 progen 과 tmake 를 이용했던 것을 간편하게 qmake 로 만들었다.
바로 앞의 예제를 보면 알 수 있다.
====== 실수 아닌 실수 ======
QT/X11 과 QT/Embedded 는 98% 같다고 볼 수 있다. 문법이나 API 모두 동일하기 때문에 하나의 프로그램을 컴파일해서 실행시켜봐도, 실행되는 모습마저 흡사하다. 그렇다면 다른 점은 무엇일까?
바로 qvfb 의 사용 유/무 에 있다. 나는 그 동안 QT/X11 을 QT/Embedded 로 착각하고 있었다. 문제의 원인은 환경변수에 있었다.
----
{{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(todays|about|guestbook)$/ nsort rsort}}
----