개발 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 <qapplication.h>
#include <qwidget.h>
 
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 로 착각하고 있었다. 문제의 원인은 환경변수에 있었다.

  • computer/celrun/개발환경_구축하기_-_1.x86_기반의_qt.txt
  • Last modified: 3 years ago
  • by likewind