2016-10-21 31 views
-2

動的にリンクされたアプリケーションは300 KBでしたが、静的なリンクの構築を試みることにしました。静的にリンクされたアプリケーションサイズの縮小

は、私は次のようにQtのを設定した:私は依存関係にリンクしなければならなかった、動的にリンクされたビルドで

configure -c++11 -mp -static -debug-and-release -platform win32-msvc2012 -opengl desktop -opensource -confirm-license -make libs -nomake tools -nomake tests -nomake examples -no-openssl -skip webkit 

qtmain.lib 
Qt5Gui.lib 
Qt5Core.lib 
Qt5Widgets.lib 
Qt5Network.lib 
Qt5WinExtras.lib 
qwindows.lib 

今、私は15個のライブラリを使用する必要があります!私は私の溶液中での正規表現も自由なタイプを使用していない場合、私は意味

qtmain.lib 
qtpcre.lib 
Qt5Gui.lib 
Qt5Core.lib 
Qt5Widgets.lib 
Qt5Network.lib 
Qt5WinExtras.lib 
opengl32.lib 
imm32.lib 
Ws2_32.lib 
Qt5PlatformSupport.lib 
qtfreetype.lib 
winmm.lib 
qtharfbuzzng.lib 
qwindows.lib 

、なぜ私はqtpcre、またはqtfreetypeをリンクしなければなりませんか?私は本当にそれらのすべてが必要ですか?

完全最適化を有効にしようとしました。

結果では、私のアプリケーションサイズは10,731KBであり、それは本当にイライラしてうつ病です。それを減らす可能性はありますか?外部アプリケーションはおそらく?

(はい、私はそれが静的なビルドだと、それは7メガバイト以下のファイルではありませんが、多分私は、少なくとも10メガバイトの下に得ることができます知っています?)

+1

ダイナミックライブラリのセットに依存します。それらは順番に他の動的ライブラリに依存します。これは他のライブラリなどに依存します。静的にリンクする場合は、依存関係ツリー内のすべてのライブラリにリンクする必要があります。また、実行可能ファイルが非常に大きくなる可能性がありますが、これは静的リンクのトレードオフです。また、メモリ要件は実際には実際には変わらず、これらの動的ライブラリはすべてロードする必要があります。静的にリンクすると、OSによってロードされる必要があるファイルが1つだけなので、メモリを実際に節約できます。 –

+0

正規表現を使用する必要はないかもしれませんが、使用するqtライブラリ関数は正規表現を必要とするため、それらをリンクする必要があります。静的リンクを使用する場合は、間接的な依存関係をすべて見つけることがあなたの責任です。動的リンクを使用している場合でも、動的リンカーがすべてのコードを処理するという点を除いて、すべてのコードを引き継いでいます。 –

+0

また、デバッグやリリースのビルドに表示されるサイズですか?実行ファイルからデバッグやその他のメタデータを削除しようとしましたか?速度よりもサイズを最適化するためにコンパイラフラグを渡しますか? –

答えて

1

大幅に実行可能ファイルのサイズを小さくするツールがありますがupx

使用法と呼ばれる:

upx --best path/to/executable 

をも)出力を印刷しません-qオプションを追加することを検討してください。この方法で、このツールをビルドプロセスに追加して、追加の手作業を回避できます。

+0

すてきなツール。ありがとう! :) –

1

余分な依存関係がありそうなシステムが動的ビルドをライブラリですそうしないと、動的または間接的な依存関係がロードされます。静的なビルドでは、プラグインとして使用できず、バイナリにインクルードする必要があります。

明示的に機能を使用していないという理由だけで、あなたが訴えている機能が他人やその他に依存しているわけではありません。依存関係は、それが直接か間接かにかかわらず、依存関係です。

10 mbはあまり目立たず、ダイナミックリンクライブラリの展開に比べてかなりのスペースを節約しています。バイナリには必要な機能がすべて含まれているので、本当にそれらのモジュールが必要な場合は、実際には何もできません。また、静的ビルドでは、パフォーマンスがやや向上します(もちろんデプロイメントの利便性も向上します)。

私はデフォルトのコンパイラフラグを思いついていませんが、デフォルトではサイズに最適化されていない可能性が高いため、MSVCの場合、最小サイズに/O1を使用してバイナリを小さくすることがあります。これにより、パフォーマンスがわずかに低下する可能性があることに注意してください。

また、ライブラリの数が多くても、それらのほとんどはかなり小さく、実際にバイナリサイズにそれほど多くを追加することはありません。

最後に、あなたは本当にQt用のデバッグバイナリをビルドしたくありません - それらは巨大であり、無駄な時間がかかります。ダイナミックリンクバージョンを使用してデバッグし、リリース用のスタティックバイナリのみをビルドします。

関連する問題