• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:静的ライブラリ利用時の実行ファイルのサイズ)

静的ライブラリ利用時の実行ファイルのサイズ

このQ&Aのポイント
  • 静的リンクライブラリを利用する際に実行ファイルのサイズについて疑問があります。
  • 静的ライブラリには必要のない部分も含まれるのか、またそれが実行ファイルのサイズに影響するのかについて調査しています。
  • 自作ライブラリを作成するにあたって、複数の静的ライブラリを利用するか、1つのライブラリに集中するか迷っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

>そのライブラリの1部しか利用しない場合でも,利用側プログラムのバイナリにはライブラリのバイナリすべてが含まれてしまうのでしょうか.  そのとおり。正解です。  例え、100個の関数の内、1個しか使わなくても、全部リンクされます。  理由は、そのたった一個の関数が、巡り巡って、他の全部の関数を呼び出している「かも」しれないからです。リンカーが、必要な関数だけをリンクするようにしようとすると、内部に含まれている全ての関数が、自分にはどの関数が必要かをコンパイラーに宣言させる必要が出てきます。また、ライブラリーにグローバルな変数が含まれていれば、それも列挙する必要があります。  そのような宣言があったとしても、今度は、リンカーは全ての必要な関数と変数等を列挙し、その部分だけをバイナリレベルで抜き出し、新しいライブラリーを構築する・・・という作業が必要です。単一のライブラリー内だけでその解析が収まれば良いですが、別のライブリー経由でもう一度自分のライブラリーの別の関数を呼ぶなんて可能性も考えれば、これ、相当困難な作業になります。  というわけで、リンカーは、単純に、必要と宣言されたライブラリーを、ファイルまるごとターゲットファイルにリンクします。

marriess
質問者

お礼

詳しく分かりやすくありがとうございました. 大変助かりました.

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>静的ライブラリに関する質問なのですが,そのライブラリの1部しか利用しない場合でも,利用側プログラムのバイナリにはライブラリのバイナリすべてが含まれてしまうのでしょうか. 基本的にはそうですが最近はスマートリンクというものもあります。

marriess
質問者

お礼

回答ありがとうございました.

関連するQ&A