7

今日ブーストのビルド済みライブラリをダウンロードするまで、静的ライブラリと動的ライブラリのサイズの違いについてあまり考えたことはありませんでした。boost の静的ライブラリは、動的ライブラリよりもはるかに大きいことがわかりました。

たとえば、デバッグ マルチスレッド ブースト ウェーブの静的ライブラリ97.7 mbのサイズは同じですが、動的ライブラリの1.4 mbサイズは (インポート ライブラリと dll を含む) だけです! それは大きな違いです。何故ですか?

wave2 番目の質問は、たとえばライブラリに対して静的にリンクする場合です。それは、私の実行可能ファイルのサイズが よりも大きくなることを意味します97.7 mbか?

4

4 に答える 4

4

スタティック ライブラリには、完全なデバッグ シンボル情報が含まれています。DLL の場合、その情報は .pdb ファイルに含まれます (サイズは静的ライブラリに似ていると思います)。

静的ライブラリにリンクすると、シンボル情報は .exe にコピーされず、.pdb ファイルに配置されます (ビルドが .pdb ファイルを作成するように構成されている場合)。.pdb が作成されるかどうかに関係なく、.pdb ファイルを .exe と一緒に配布する必要はありません。

boostpro.com から入手したビルド済みライブラリのダウンロードで、提供されているブースト DLL の .pdb ファイルを入手できません。DLL を自分でビルドすると、おそらく .pdb ファイルを取得できます (ただし、いくつかの構成オプションを設定する必要があるかもしれませんが、その詳細についてはわかりません)。


アップデート:

ブースト DLL 用の .pdb ファイルを簡単に取得するのは間違っているようです。http://comments.gmane.org/gmane.comp.lib.boost.build/23246から:

> Is there an additional option that I can pass on the command line to
> have the (correctly generated) PDB files also copied into the stage
> directory?

現時点ではありません。ハッキングして、 or が現在書かれているすべての場所 tools/build/v2/tools/package.jamに追加することしかできません 。<install-type>PDB<install-type>SHARED_LIB<install-type>STATIC_LIB

于 2011-01-06T08:19:33.300 に答える
3

いいえ、LIB ファイルが特定のサイズだからといって、そのサイズが EXE に追加されるわけではありません。実際、ほとんどのリンカは、使用されているものだけをリンクできるほどスマートです。それを、すべてを含む必要がある動的ライブラリと比較してください。

静的ライブラリは間違いなく EXE を大きくしますが、私は常にそれを好みます。そうすれば、実行時にライブラリの欠落や互換性のないライブラリについて心配する必要がなくなります。(または、少なくとも、私はこの可能性を最小限に抑えます。)

于 2011-01-06T07:41:15.697 に答える
1

静的ライブラリには完成したバイナリデータは含まれていませんが、リンカーがバイナリをビルドするために必要な情報が含まれているため、この情報はビルドされたバイナリよりも大きくなる可能性があります。

ヘッダーファイルで定義された関数がcpp-fileで使用される場合、コンパイラはそのコード(インラインまたは単に追加)を結果のオブジェクトファイルに配置します。これは、重複がたくさんあることを意味します。それらをマージするのはリンカーの仕事なので、静的ライブラリはリンカーが削減されるのを待つだけです:)

一般に、実行可能ファイルのサイズは静的ライブラリでは通常大きくなりますが、動的ライブラリと一緒に実行可能ファイルのサイズは通常小さくなります。DLLとEXEは別々にリンクされているため、リンカはDLLに必要な機能と、破棄できる機能を認識できません。静的ライブラリの場合、リンカはそのような情報を持っており、使用されているobjファイルのみを取得できます。

于 2011-01-06T07:58:48.037 に答える
0

デバッグ静的ライブラリには、サイズの大きな違いを説明するデバッグ情報が含まれています。

于 2011-01-06T07:54:44.887 に答える