質問

私は静的ライブラリ*.lib用MSVC windows上でしか利用できません。のサイズの図書館はい70KB.を行うとともに対応したアプリケーションリンクはこの図書館があります。このサイズの最終実行ファイル(*.exe)は29KB以下での図書館があります。私が知りたいです:

  1. 以降、図書館は静的リンクに考え、いま教え与えるべきであるの追加に直接実行ファイルサイズの最終エグゼサイズは以上です。はwindows exe形式にもいくつかの圧縮のバイナリデータはもらえますか?

  2. どうでlinuxシステムは、どのようなサイズのライブラリlinux(*.a/*.ラファイルなど)と関連があるサイズのlinux実行ファイル(*.す。

-AD

役に立ちましたか?

解決

最終的な実行のために必要されていない.libファイルに追加の簿記情報があります。この情報は、リンカが実際にリンクするコードを見つけることができます。また、デバッグ情報が.libファイルに格納することができるではなく.exeファイルに(私はデバッグ情報は、LIBファイルにOBJSのために格納されている場所を覚えていません、それはどこか別の場所かもしれません)。

他のヒント

静的ライブラリにWindowsとUnixの両方が集ます。obj/.oファイルです。リンカーでそれぞれのオブジェクトファイルの場合はtrue、そうでない場合はfalseければならないのは、プログラムのリンクです。ってなければ、そのオブジェクトファイルなの最終実行形式にまとめたものです。このことは実行可能ファイルをリーズは、その後の図書館があります。

編集:としてMSaltersポイントは、Windows VC++コンパイラこれによって、オブジェクトを生成するファイルにより機能レベルのリンクなどの見 こちらの.実際、編集および継続が必要となりますが、編集、継続できるように最小限の部分の実行形式にまとめたものです。

静的ライブラリは、おそらく使用されることはありませんいくつかの機能が含まれています。リンカは、メインの実行ファイルとライブラリをリンクする際には、特定の機能が使用されることはありませんことを(およびそれらのアドレスが取られていないと関数ポインタに格納んことを)見て、それだけで、コードを破棄します。また、これは再帰的に行うことができます。if関数A()が呼び出されることはありません、そしてAは、()B()を呼び出しますが、Bは()そう呼ばれることはありません、それはA(両方のコードを削除することができます)とB()。 Linuxでは、同じことが起こります。

免責事項:れていて静的リンクで、私の答えは、結晶粒の塩です。

書き: したヴィッセル神戸は、神戸市での追加に直接実行ファイルサイズ、最終エグゼサイズは以上です。

素朴志作業を正確にこのようにバックをやってた時に、"ホビーの開発のためのCP/Mのシステム(昔),これらの問題です。

現代の志はスマートしたいリンクの機能によって参照されるオンエンジンとして必要です。

また、現在の答えに、リンカーは、それらが同一オブジェクトコードを持っている場合、関数の定義を削除することが許可されている - これは、テンプレートのコードの膨満感の影響を軽減するためのものです。

静的ライブラリは、それがのかもしれません。のちょうどその特定のシンボルを必要とする実行可能ファイルにリンクされますので、そのソースコードに定義されているのすべてののシンボルが含まれている必要があります。それは実行可能ファイルにリンクされた後しかし、我々はシンボルが使用されてしまうかを正確に知っている、そしてそのものはありません。だから、リンカは自明抽選でファイルサイズをトリミング、未使用のコードを削除することができます。同様に、任意の重複したシンボル(静的ライブラリとそれが単一のインスタンスにマージされますにリンクされている実行ファイルの両方で定義されていますもの。

@All:ポインタをいただきありがとうございます。 @グレッグHewgillは - あなたの答えは良いポインターました。おかげます。

次のように

私が見つけた答えだっます:

1)オプションMSVCで「プログラムのデバッグdatabseを保持」(または同様のもの)がONの場合、ライブラリはそのサイズを膨満感、このデバッグ情報を持っていますで何が起こるか図書館の建物の間に。  私は静的にそのライブラリが含まれており、実行可能ファイルを作成するときには、リンカは、exeファイルをgeenrating前に、ライブラリからのすべてのそのデバッグ情報を取り除き、したがって、exeファイルのサイズは、ライブラリのそれよりも小さいます。

2。)私はオプションを無効にすると、「プログラムのデバッグdatabseを保持」、私はそのサイズが、私はほとんどの状況でnromalであると考えられていたものを最終的な実行、より小さかったライブラリーを得ています。

〜AD

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top