C++ でクラス ライブラリを作成する場合、動的ライブラリ ( .dll
、.so
) と静的ライブラリ ( .lib
、.a
) のどちらかを選択できます。これらの違いは何ですか。また、どちらを使用するのが適切なのでしょうか。
ベストアンサー1
静的ライブラリはバイナリ内のコードのサイズを大きくします。静的ライブラリは常にロードされ、コンパイルしたコードのバージョンが実行されるコードのバージョンになります。
動的ライブラリは別々に保存され、バージョン管理されます。更新が元のバージョンとバイナリ互換であると見なされる場合、コードに同梱されていた元のバージョンとは異なるバージョンの動的ライブラリがロードされる可能性があります。
さらに、動的ライブラリは必ずしもロードされるわけではなく、通常は最初に呼び出されたときにロードされ、同じライブラリを使用するコンポーネント間で共有できます (複数のデータのロード、1 つのコードのロード)。
動的ライブラリは、ほとんどの場合、より優れたアプローチであると考えられていましたが、当初は大きな欠陥 (Google DLL 地獄) があり、最近の Windows OS (特に Windows XP) では、この問題はほぼ解消されました。