Wednesday, August 11, 2010

QT의 크기를 줄이자

QT의 크기를 줄이자장길석http://forum.falinux.com/zbxe/?document_srl=4519472008.06.05 10:15:49 (*.105.125.81) 5110이번 글은 강좌나 개발 팁이 아니라 다른 분의 도움을 구하기 위해 올리는 글입니다. 글의 주제는 QT 라이브러리의 크기입니다. 더욱이 저는 QT4를 사용하고 있어서 라이브러리 크기가 부담 스럽습니다.

]# du -h lib/
32K lib/pkgconfig
15M lib/fonts
31M lib/
]#QT lib 크기가 자그만치 31M입니다. 그나마 다행(?)인 점은 폰트만 15M를 차지한다는 점입니다. 그럼 라이브러리의 크기를 줄이려면 어떻게 할까요?

strip으로 파일 크기 줄이기

라이브러리 파일에는 컴파일 시에 링크를 위한 참조 정보인 심볼이 있습니다. 이 심볼은 실행할 때는 필요 없기 때문에 삭제하여 크기를 줄일 수 있습니다. 이렇게 압축이 아닌 필요없는 정보를 삭제하는 것이라 기대만큼 파일 크기가 줄어 들지는 않더군요.

gcc 로 컴파일하셨다면 strip로, arm-linux-gcc 로 컴파일하셨다면 arm-linux-strip를 이용하시면 됩니다. 물론 arm-mipsel-gcc라면 arm-mipsel-strip가 되겠지요. 그럼 파일별로 크기를 보겠습니다.

[root@jwLinux lib]# ls -al -h
++계 17M
drwxr-xr-x 4 root root 4.0K 5+?21 01:06 .
drwxrwxrwt 18 root root 4.0K 5+?25 21:08 ..
drwxr-xr-x 2 root root 4.0K 5+?21 01:06 fonts
-rw-r--r-- 1 root root 707 5+?21 01:06 libQtCore.la
-rw-r--r-- 1 root root 637 5+?21 01:06 libQtCore.prl
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so -> libQtCore.so.4.3.4
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so.4 -> libQtCore.so.4.3.4
lrwxrwxrwx 1 root root 18 5+?25 11:13 libQtCore.so.4.3 -> libQtCore.so.4.3.4
-rwxr-xr-x 1 root root 2.6M 5+?21 01:06 libQtCore.so.4.3.4
-rw-r--r-- 1 root root 755 5+?21 01:06 libQtGui.la
-rw-r--r-- 1 root root 692 5+?21 01:06 libQtGui.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so -> libQtGui.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so.4 -> libQtGui.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtGui.so.4.3 -> libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 11M 5+?21 01:06 libQtGui.so.4.3.4
-rw-r--r-- 1 root root 778 5+?21 01:06 libQtNetwork.la
-rw-r--r-- 1 root root 690 5+?21 01:06 libQtNetwork.prl
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so -> libQtNetwork.so.4.3.4
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so.4 -> libQtNetwork.so.4.3.4
lrwxrwxrwx 1 root root 21 5+?25 11:13 libQtNetwork.so.4.3 -> libQtNetwork.so.4.3.4
-rwxr-xr-x 1 root root 589K 5+?21 01:06 libQtNetwork.so.4.3.4
-rw-r--r-- 1 root root 771 5+?21 01:06 libQtScript.la
-rw-r--r-- 1 root root 687 5+?21 01:06 libQtScript.prl
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so -> libQtScript.so.4.3.4
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so.4 -> libQtScript.so.4.3.4
lrwxrwxrwx 1 root root 20 5+?25 11:13 libQtScript.so.4.3 -> libQtScript.so.4.3.4
-rwxr-xr-x 1 root root 1.4M 5+?21 01:06 libQtScript.so.4.3.4
-rw-r--r-- 1 root root 750 5+?21 01:06 libQtSql.la
-rw-r--r-- 1 root root 678 5+?21 01:06 libQtSql.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so -> libQtSql.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so.4 -> libQtSql.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSql.so.4.3 -> libQtSql.so.4.3.4
-rwxr-xr-x 1 root root 297K 5+?21 01:06 libQtSql.so.4.3.4
-rw-r--r-- 1 root root 771 5+?21 01:06 libQtSvg.la
-rw-r--r-- 1 root root 699 5+?21 01:06 libQtSvg.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so -> libQtSvg.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so.4 -> libQtSvg.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtSvg.so.4.3 -> libQtSvg.so.4.3.4
-rwxr-xr-x 1 root root 462K 5+?21 01:06 libQtSvg.so.4.3.4
-rw-r--r-- 1 root root 750 5+?21 01:06 libQtXml.la
-rw-r--r-- 1 root root 678 5+?21 01:06 libQtXml.prl
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so -> libQtXml.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so.4 -> libQtXml.so.4.3.4
lrwxrwxrwx 1 root root 17 5+?25 11:13 libQtXml.so.4.3 -> libQtXml.so.4.3.4
-rwxr-xr-x 1 root root 563K 5+?21 01:06 libQtXml.so.4.3.4
drwxr-xr-x 2 root root 4.0K 5+?21 01:06 pkgconfig
[root@jwLinux lib]# 11Mbyte나 되는 libQtGui.so.4.3.4의 크기를 줄여 보겠습니다. strip를 사용하기 전에 파일 정보를 알아 보겠습니다.

]# file libQtGui.so.4.3.4
libQtGui.so.4.3.4: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), not stripped
]#mipsel-linux-strip으로 파일 크기를 줄이고 파일 정보를 확인해 보겠습니다.

]# mipsel-linux-strip libQtGui.so.4.3.4
]# file libQtGui.so.4.3.4
libQtGui.so.4.3.4: ELF 32-bit LSB shared object, MIPS, version 1 (SYSV), stripped
]# ls -al -h libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 9.4M 5+?25 21:28 libQtGui.so.4.3.4
]# 파일 크기가 11M 에서 9.4M으로 줄기는 줄었습니다만 기대만큼은 아니죠. 압축이 아니라 파일 내용 중에 실행에 필요없는 정보를 삭제하는 것이라 많이 줄지는 않더군요. 나머지를 모두 줄여 보았습니다.

]# ls -al -h
++계 15M
-rwxr-xr-x 1 root root 2.4M 5+?25 21:31 libQtCore.so.4.3.4
-rwxr-xr-x 1 root root 9.4M 5+?25 21:31 libQtGui.so.4.3.4
-rwxr-xr-x 1 root root 506K 5+?25 21:31 libQtNetwork.so.4.3.4
-rwxr-xr-x 1 root root 1.3M 5+?25 21:31 libQtScript.so.4.3.4
-rwxr-xr-x 1 root root 250K 5+?25 21:31 libQtSql.so.4.3.4
-rwxr-xr-x 1 root root 389K 5+?25 21:31 libQtSvg.so.4.3.4
-rwxr-xr-x 1 root root 488K 5+?25 21:31 libQtXml.so.4.3.4
]# du -h
15M ./fonts
32K ./pkgconfig
30M .
]#
줄기는 줄었지만 역시 기대만큼은 아니죠. 그래도 1개의 바이트 공간도 아쉬운 임베디드 환경에서 큰 차이는 아니더라도 이용하는 것이 좋겠습니다.

사용하지 않는 폰트 삭제

그다음에 눈에 띄는 것이 역시 폰트입니다.

lib]# cd fonts/
fonts]# ls -al
++계 14728
drwxr-xr-x 2 root root 4096 5+?21 01:06 .
drwxr-xr-x 4 root root 4096 5+?25 21:31 ..
-rw-r--r-- 1 root root 466696 5+?21 01:06 DejaVuSans-Bold.ttf
-rw-r--r-- 1 root root 441736 5+?21 01:06 DejaVuSans-BoldOblique.ttf
-rw-r--r-- 1 root root 434576 5+?21 01:06 DejaVuSans-Oblique.ttf
-rw-r--r-- 1 root root 493564 5+?21 01:06 DejaVuSans.ttf

...중략...

-rw-r--r-- 1 root root 1602 5+?21 01:06 micro_40_50.qpf
-rw-r--r-- 1 root root 1215089 5+?21 01:06 unifont_160_50.qpf
-rw-r--r-- 1 root root 672139 5+?21 01:06 wenquanyi_120_50.qpf
-rw-r--r-- 1 root root 672139 5+?21 01:06 wenquanyi_120_75.qpf
-rw-r--r-- 1 root root 715342 5+?21 01:06 wenquanyi_130_50.qpf
-rw-r--r-- 1 root root 715342 5+?21 01:06 wenquanyi_130_75.qpf
-rw-r--r-- 1 root root 804903 5+?21 01:06 wenquanyi_150_50.qpf
-rw-r--r-- 1 root root 804903 5+?21 01:06 wenquanyi_150_75.qpf
-rw-r--r-- 1 root root 1276472 5+?21 01:06 wenquanyi_160_50.qpf
-rw-r--r-- 1 root root 1276236 5+?21 01:06 wenquanyi_160_75.qpf
fonts]# wenquanyi 폰트만 6.6M나 됩니다. 이 외에 필요없는 포트를 함께 삭제해서 사용하고 있습니다.

No comments:

Post a Comment