Qtアプリのバイナリサイズを削減する(3)
Qtアプリのバイナリサイズを削減する(2) ではサイズに最適化した結果で30%程度サンプルアプリのバイナリサイズを削減することができました。
今回は、さらに次に試すべきオプションを試してみます。
リンク時に最適化を行うコンパイルオプション
Link Time Optimization (LTO) のオプションを指定してみます。
Qt では、5.6 で -ltcg というオプションが追加されました。Windows 版は以前からこのオプションが存在していたようです。今回は前回の続きで、-static -optimized-size -ltcg を試してみます。
Qt とアプリケーションのビルド -static -optimize-size -ltcg
$ mkdir -p ~/io/qt/code/qt/dev/ltcg $ cd $_ $ ../qt5/configure -opensource -confirm-license -release -make libs -no-widgets -no-pch -prefix /opt/qt-ltcg -hostprefix $PWD/root -ccache -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/org/buildroot/raspberry-pi3/host/bin/arm-buildroot-linux-uclibcgnueabihf- -sysroot ~/org/buildroot/raspberry-pi3/host/arm-buildroot-linux-uclibcgnueabihf/sysroot/ -static -optimize-size -ltcg $ make -j4 $ make install $ mkdir -p ~/com/github/task-jp/weather/ltcg $ cd $_ $ ~/io/qt/code/qt/dev/ltcg/root/bin/qmake -r ../weather $ make -j4
ビルドする場所が違う以外は、configure のオプションに -ltcg を追加しただけです。
バイナリサイズの確認 -static -optimized-size -ltcg
$ ls -l weather -rwxr-xr-x 1 tasuku users 10802948 Jun 21 18:14 weather
まとめ
デフォルトビルド | 21821596B | 100% | |
-static | 17321224B | ↩79.4% | 79.4% |
-static -optimize-size | 11773660B | ↩68.0% | 54.0% |
-static -optimize-size -ltcg | 10802948B | ↩91.8% | 49.5% |
LTO の効果で1割程度バイナリサイズが減り、最初と比べると半分以下になりました。
リンク処理にとても時間がかかるようになりましたが、最適化されている感じがありますね。