ホームページ  >  記事  >  運用・保守  >  Linuxの動的ライブラリと静的ライブラリの違いは何ですか

Linuxの動的ライブラリと静的ライブラリの違いは何ですか

青灯夜游
青灯夜游オリジナル
2021-11-23 11:08:506280ブラウズ

違い: 1. 静的ライブラリはプログラムのコンパイル時にターゲット コードに接続され、プログラムの実行時には静的ライブラリは必要なくなります。動的ライブラリはターゲット コードに接続されません。プログラムのコンパイル時にターゲット コードがロードされますが、プログラムの実行時にロードされるため、プログラムの実行時にダイナミック ライブラリが存在する必要があります。 2. 動的ライブラリによって生成されるファイルは比較的小さく、静的ライブラリによって生成されるファイルは比較的大きくなります。

Linuxの動的ライブラリと静的ライブラリの違いは何ですか

#このチュートリアルの動作環境: CentOS 6 システム、Dell G3 コンピューター。

#Linux の動的ライブラリと静的ライブラリの類似点と相違点

類似点:

静的ライブラリと動的ライブラリはどちらも .o ファイルによって作成されます。したがって、まず gcc を通じてソース プログラムを .o ファイルにコンパイルする必要があります;

違い:

1. コードの読み込み時間が異なります。

    プログラムのコンパイル時に静的ライブラリがターゲット コードに接続されます。
  • プログラムの実行時には静的ライブラリは必要なくなります。
  • ダイナミック ライブラリは、プログラムのコンパイル時にターゲット コードに接続されませんが、プログラムの実行時にロードされるため、プログラムの実行時にダイナミック ライブラリが存在する必要があります。
2. さまざまなコンパイル ルール

動的ライブラリのコンパイル
  • 動的クラスの名前ライブラリは一般に libxxx.so であり、動的関数ライブラリはコンパイル中にターゲット コードにコンパイルされません。プログラムは、該当する関数に到達したときにのみ、関数ライブラリ内の対応する関数を呼び出します。そのため、によって生成される実行可能ファイルは、ダイナミック関数ライブラリは比較的小さい;

Dynamic ライブラリをコンパイルするとき:

最も重要なことは、GCC コマンド ラインのオプションです -shared このオプションは、ダイナミック リンク ライブラリの生成を指定します。例:

g -shared -o libd1.so d1.o /*中間ターゲット ファイル d1.o*/

g -shared に基づいてダイナミック ライブラリ ファイル d1.so を作成します-o libd2.so d2.o /*中間ターゲット ファイル d2.o に基づいてダイナミック ライブラリ ファイル d2 を作成します。so*/

静的ライブラリのコンパイル
  • 名前クラス ライブラリの一般的なファイルは libxxx.a です; 静的関数ライブラリを使用してコンパイルされたファイルは、関数ライブラリ全体のすべてのデータがターゲット コードに統合されるため、比較的大きくなり、その利点は明らかです。使用されるすべての関数がコンパイルされているため、外部関数ライブラリのサポートは必要ありません。もちろん、静的関数ライブラリが変更されるとプログラムを再コンパイルする必要があるため、これは欠点でもあります。

UNIX では、ar コマンドを使用して静的ライブラリを作成または操作します

ar archivefile objfile

archivefile: archivefile は静的ライブラリの名前です

objfile :objfile は、.o の拡張子が付いた中間ターゲット ファイル名で、複数の並列実行が可能です。

例:
g++ -o hello.o -c hello.cpp
ar cqs libHello.a hello.o

関連する推奨事項: "

Linux ビデオ チュートリアル

以上がLinuxの動的ライブラリと静的ライブラリの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。