2011-07-12 1 views
1

共有ライブラリと静的ライブラリに関するいくつかの質問があります。私がしたことを教えてください。また、gccコマンドとlibarith.aのサイズを使用する共有ライブラリは6KB、libarith.soのサイズは18KBです。ライブラリには同じ機能があります。私たちが共有ライブラリより静的ライブラリを使用すると、exeファイルのサイズがもっと大きい理由

私は1つの簡単な関数を使用(たとえば追加(A、B))のexeファイルのサイズが16.1キロバイトである私のmake.cファイルで、これらのgccコマンドを使用して静的ライブラリをリンクし、

  gcc -L/cygdrive/c/cpros make.c -larith.a # used a static library 

次のようにmake.cファイルで同じ機能(同じadd(a、b))を使用しましたが、今回は共有ライブラリを使用しています。

  gcc make.c /cygdrive/c/cpros/libarith.so #used a shared library 

残念ながら、exeファイルのサイズは12.1 KBです。どのように思う? libarith.soのサイズはlibarith.aと比べて18 KBです。ちょうど6 KBです。最後に、共有ライブラリを使用して生成されたexeファイルは静的ライブラリに比べて少なくなります。

誰でも私にその理由を教えてもらえますか?共有ライブラリが少ないメモリを消費する場合は、共有ライブラリを常に使用しないでください。共有ライブラリをいつ使用するのか、またいつ静的ライブラリを使用するのかを教えてください。

はい私が-fPICを使って共有ライブラリを作成していたとき、それは私に警告の独立したコードを与えました。その警告は実際にはどういう意味ですか?

答えて

1

共有ライブラリには多くの再配置コードが含まれているため、静的ライブラリよりもサイズが大きくなっています。

実行可能ファイルを静的ライブラリでコンパイルすると、その静的ライブラリが実行可能ファイルに含まれます。

共有ライブラリとその逆の共有ライブラリを選択する理由はたくさんあります。埋め込みプラットフォーム用のコードを書く場合は、静的を選択します。ライブラリが他の多くのアプリケーションで使用されていて、すべてのアプリケーションを再コンパイルせずにアップグレードしたい場合は、共有を選択します。

また、2つの用語を混同しています。メモリ!=ストレージ。ディスク上では、共有ライブラリはもっと​​大きいかもしれませんが、インストールされると、そのコピーは1つしかありません。一方、静的ライブラリでコンパイルされたすべての実行可能ファイルには、その中に静的ライブラリのコピーがあります。

0

共有ライブラリでは、ライブラリ関数のコードがバイナリに挿入されません。従って、バイナリはより小さい。欠点は、アプリケーションと使用しているライブラリ(バージョン番号DLL Hell)間のバージョンのミスマッチに問題があることです。これはカップリングがかなり緩いためです。

関連する問題