이번 글은 강좌나 개발 팁이 아니라 다른 분의 도움을 구하기 위해 올리는 글입니다. 글의 주제는 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나 됩니다. 이 외에 필요없는 포트를 함께 삭제해서 사용하고 있습니다.

다른 방법을 묻습니다. ^^

위의 방법 말고도 혹시 QT 라이브러리의 크기를 줄이는 좋은 방법이 없을까요? 다른 좋은 방버을 알고 계신는 분은 댓글로 알려 주시거나 새로운 강좌 글로 올려 주신면 감사하겠습니다.