====== 개발환경 구축하기 - 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}} ----