2007년 7월 11일 수요일

Qt4 설치 수기

아직 TS-7200 보드에서 X를 띄울수 있는 상황이 아니라서 필요하지는 않지만 요즘 X Window 프로그램을 작성해볼까해서 지난 5일동안 밤잠도 잊은채 웹을 뒤져가며 삽질했던 내용을 적어볼까 합니다.

가장 먼저 알게 된 것은 X 프로그래밍을 하는것이 예전처럼 어렵지않은 환경을 가지고 있었다는 겁니다. 나만 몰랐나 -:( 지금은 데스크탑을 넘어서 이기종간에 포팅도 자유롭고, 더군다나 임베디드 시스템에 까지 손을 뻗고 있으니 세상 참 많이 좋아졌습니다.

취미로 배워볼 생각으로 우선 위도우 매니저가 얼마나 다양해졌는지 한번 살펴봤습니다. http://www.xwinman.org/ 에 잘 정리가 되어 있습니다. 이젠 추억으로 남아 있는 fvwm이 아직도 개발중에 있다는 것이 참 신기하네요. 호기심에 한번 설치해 보았습니다. 역시 빠른 속도에 감탄하고 하지만, 설정파일을 편집하는 것이 너무나 고전적이네요^^ UI도 이제는 먹어주지도 않고... 바로 삭제해버렸습니다. 다음은 Enlightenment. 최근에 E17로 한참 업그레이드 하고 있는 프로젝트인데 상당히 매력적인 부분이 많이 있습니다. 아무래도 이 프로젝트가 이젠 기존의 윈도우 매니저에서 KDE, GNOME 과 같은 레벨로 진화할려는 노력이 보입니다. 개발하는 입장에서는 너무나도 매력적인 프로젝트입니다. 한가지 단점이라면 한글화가 제대로 지원이 안되고 나아가 국제화에 대한 지원을 할 예정인지 알수가 없네요. 조금 아쉽습니다. 이녀석이 성공한다면 우린 또다른 API 공부해야 될지도 모릅니다. 그래도 아직 쓸만한게 있다면 Window Maker를 따라잡을수가 없나봅니다. 현재 개발중단중인것으로 알고 있는데 조금 아쉽습니다.

GTK 는 조금 공부하다 지쳐서 미루어 오다가 최근에 Qt를 접해보았는데 상당한 매력덩어리 입니다. 거부감이 드는것은 라이센스 보다는 Qt의 철학이 조금은 마음에 들지 않습니다. 필요한 라이브러리를 모두 모아 두어서 나중에 여기에 의존할까 두렵습니다. NetBSD에 설치하기 전에 Linux와 Windows에 설치해보았는데 잘 돌아가더군요. 이번에는 NetBSD에 설치해보기로 했는데 왠만하면 source 컴파일해서 설치하지 말기 바랍니다. 디스크 사용량이 너무 많고 시간이 오래 걸립니다.(거짓말 조금 더해서 하루 정도)

꼭 필요한 패키지는 다음과 같습니다.
x11/qt4-libs, x11/qt4-tools

x11/qt4-docs 도 유용하니 설치해도 좋구, x11/qt4는 이 세가지의 meta-package입니다. 추가적으로 x11/qt4-psql 도 존재하네요.

netbsd ftp의 NetBSD-3.1/i386/All 에 보니 패키지가 다음 처럼 되어 있습니다.

-rw-rw-r-- 1 1115 netbsd 2927 Jun 20 08:52 qt4-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 19814564 Jun 19 05:02 qt4-docs-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 116137867 Jun 18 20:11 qt4-libs-4.2.3nb1.tgz
-rw-rw-r-- 1 1115 netbsd 435832 Jun 19 04:58 qt4-psql-4.2.3.tgz
-rw-rw-r-- 1 1115 netbsd 47654710 Jun 18 22:04 qt4-tools-4.2.3.tgz

저 엄청난 크기를 보세요. openoffice를 넘어버리는 크기에 놀랐습니다. 참고로 qt4-libs source 컴파일시에 필요한 공간을 보면,

netbsd: {6} df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 4.8G 4.4G 145M 96% /
kernfs 1.0K 1.0K 0B 100% /kern

/usr/pkgsrc/x11/qt4-libs/work 삭제 후...

netbsd: {7} df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 4.8G 2.8G 1.7G 61% /
kernfs 1.0K 1.0K 0B 100% /kern

library만 컴파일하는데 1.6 GB 정도 필요합니다. 그리고 전 설치시에 다음과 같은 에러가 나더군요.

.obj/release-shared/.libs/qabstractpagesetupdialog.o: could not read symbols: Memory exhausted
gmake: *** [../../lib/../../lib/libQtGui.la] Error 1
*** Error code 2

sysctl 로 사용자 limit를 수정해서 하면 될것 같은데 결국은 해결을 못해서 포기했습니다. 이때 부터 바이너리로 설치 시작...

qt4(4.2.3) 설치 요약
--------------------
qt4-libs: 약 500MB
qt4-tools: 약 165MB
qt4-docs: 약 53MB

설치는 /usr/pkg/qt4/{bin, lib, include, doc. ,,,} 로 됩니다.
PATH, LD_LIBRARY_PATH 환경 변수를 설정해 줘야겠네요.

간단한 build test
-----------------
hello.cpp

#include "QApplication"
#include "QLabel"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello, Qt!");
label->show();
return app.exec();
}

우선 컴파일전에 저는 환경변수를 다음처럼 설정했습니다.
setenv QTDIR /usr/pkg/qt4setenv LD_LIBRARY_PATH /usr/lib:/usr/X11R6/lib:/usr/pkg/lib:/usr/pkg/qt4/lib

QTDIR도 설정을 해야 되더군요.

netbsd: {27} qmake -project
netbsd: {28} qmake hello.pro
netbsd: {29} make
netbsd: {30} ldd hello
netbsd: {31} ldd hello
hello:
-lz.0 => /usr/lib/libz.so.0
-lm.0 => /usr/lib/libm387.so.0
-lm.0 => /usr/lib/libm.so.0
-lpng12.0 => /usr/pkg/lib/libpng12.so.0
-lICE.6 => /usr/X11R6/lib/libICE.so.6
-lSM.6 => /usr/X11R6/lib/libSM.so.6
-lstdc++.5 => /usr/lib/libstdc++.so.5
-lgcc_s.1 => /usr/lib/libgcc_s.so.1
-lpthread.0 => /usr/lib/libpthread.so.0
-lQtCore.4 => /usr/pkg/qt4/lib/libQtCore.so.4
-lX11.6 => /usr/X11R6/lib/libX11.so.6
-lXext.6 => /usr/X11R6/lib/libXext.so.6
-lXi.6 => /usr/X11R6/lib/libXi.so.6
-lXrender.1 => /usr/X11R6/lib/libXrender.so.1
-lXrandr.2 => /usr/X11R6/lib/libXrandr.so.2
-lXfixes.0 => /usr/pkg/lib/libXfixes.so.0
-lXcursor.1 => /usr/X11R6/lib/libXcursor.so.1
-lXinerama.1 => /usr/X11R6/lib/libXinerama.so.1
-lfreetype.6 => /usr/pkg/lib/libfreetype.so.6
-lexpat.4 => /usr/X11R6/lib/libexpat.so.4
-lfreetype.9 => /usr/X11R6/lib/libfreetype.so.9
-lfontconfig.1 => /usr/X11R6/lib/libfontconfig.so.1
-lQtGui.4 => /usr/pkg/qt4/lib/libQtGui.so.4
-lexpat.1 => /usr/pkg/lib/libexpat.
netbsd: {32}

역시 무지 막지하게 DLL을 쓰네요.

PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
11557 pjy 2 0 3144K 8796K select 0:00 0.00% 0.00% hello

devel/iconv 가 설치되어 있지 않으면 다음과 같은 warning 메시지가 나옵니다.

QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failedQIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed


상당히 무겁게 돌아가네요.

소스가 심플한 대신 메모리 잡어먹는 귀신이 되어 버린것 같습니다. 마지막에 조금 실망...

댓글 없음: