[解決済み] スタティック・ライブラリとシェアード・ライブラリの違い?
質問
スタティック・ライブラリとシェアード・ライブラリの違いは何ですか?
私はEclipseを使っていますが、Static LibrariesとShared Librariesを含むいくつかのプロジェクトタイプがありますね?どちらかに優位性があるのでしょうか?
どのように解決するのですか?
共有ライブラリは、.so(Windowsでは.dll、OS Xでは.dylib)ファイルです。ライブラリに関連するすべてのコードはこのファイル内にあり、ライブラリを使用するプログラムからランタイムに参照されます。共有ライブラリを使用するプログラムは、共有ライブラリの中で使用するコードのみを参照します。
スタティック・ライブラリは、.a(Windowsでは.lib)ファイルです。ライブラリに関連するすべてのコードはこのファイル内にあり、コンパイル時にプログラムに直接リンクされます。スタティック・ライブラリを使用するプログラムは、スタティック・ライブラリから使用するコードのコピーを取得し、それをプログラムの一部にします。[Windowsには、.dllファイルを参照するための.libファイルもありますが、これらは最初のものと同じように動作します]。
それぞれの方式にメリットとデメリットがあります。
-
共有ライブラリは、ライブラリを利用する各プログラムで重複するコード量を減らし、バイナリを小さく保つことができます。また、共有オブジェクトを機能的に同等のものに置き換えることができますが、それを利用するプログラムを再コンパイルする必要はなく、性能上の利点が追加されている可能性があります。ただし、共有ライブラリは、関数の実行に若干の追加コストがかかるほか、ライブラリ内のすべてのシンボルを使用するものに接続する必要があるため、ランタイムのロードコストがかかります。さらに、共有ライブラリはランタイムにアプリケーションにロードすることができ、これはバイナリプラグインシステムを実装するための一般的なメカニズムである。
-
スタティック・ライブラリは、バイナリ全体のサイズを大きくしますが、使用するライブラリのコピーを持ち歩く必要がないことを意味します。コンパイル時にコードが接続されるため、ランタイムの読み込みコストが追加されることはありません。コードは単にそこにあるのです。
個人的には、共有ライブラリを好みますが、C++標準ライブラリの特定のバージョンやBoost C++ライブラリの特定のバージョンなど、満たすことが困難な外部依存をバイナリに多く持たせないようにする必要がある場合は、静的ライブラリを使用します。
関連
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] g++とgccの違いは何ですか?
-
[解決済み] mallocとcallocの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】スタティックリンクとダイナミックリンクの比較