Linux オペレーティング システムの動的ライブラリと静的ライブラリ (未完成)

1. 静的ライブラリと動的ライブラリ

  • 静的ライブラリ (.a): プログラムは、コンパイルおよびリンク時にライブラリ コードを実行可能ファイルにリンクします。プログラムの実行中に静的ライブラリは必要なくなります
  • ダイナミック ライブラリ (.so): プログラムの実行中にダイナミック ライブラリのコードがリンクされ、複数のプログラムでライブラリのコードを共有します。ダイナミック ライブラリにリンクされた実行可能ファイルには、外部関数が配置されているターゲット ファイルのマシン コード全体ではなく、使用する関数のエントリ アドレスのテーブルのみが含まれています。
  • 実行可能ファイルの実行が開始される前に、オペレーティング システムによって外部関数のマシン コードがディスク上のダイナミック ライブラリからメモリにコピーされます (このプロセスはダイナミック リンクと呼ばれます)。
  • 動的ライブラリは複数のプログラム間で共有できるため、動的リンクにより実行可能ファイルが小さくなり、ディスク領域が節約されます。オペレーティング システムは仮想メモリ メカニズムを使用して、物理メモリ内の動的ライブラリを、ライブラリを使用するすべてのプロセスで共有できるようにし、メモリとディスク領域を節約します。

2. 静的ライブラリ

静的ライブラリを生成する

ar -rc libxxx.a add.o sub.o

静的ライブラリ内のディレクトリのリストを表示する

ar -tv libxxx.a
t:列出静态库中的文件
v:verbose 详细信息

 

リンク静的ライブラリ

-L はライブラリのパスを指定します -l はライブラリ名を指定します テスト対象ファイルの生成後、静的ライブラリは削除されますが、プログラムは引き続き実行できます。

ライブラリの検索パス

  • -L で指定したディレクトリを左から右に検索します。
  • 環境変数で指定したディレクトリ
  • (LIBRARY_PATH) システムが指定したディレクトリ

  • /usr/lib

  • /usr/local/lib

3. ダイナミックライブラリ

動的ライブラリを生成する

  • 共有: 共有ライブラリ形式の生成を示します
  • fPIC:位置非依存コード(位置非依存コード)の生成
  • ライブラリ名の規則: libxxx.so

動的ライブラリを使用する

コンパイルオプション

  • l: ライブラリ名があれば十分である限り、ダイナミック ライブラリにリンクします (lib とバージョン番号を削除します)。
  • L: リンク ライブラリが配置されているパス。

ここで私を混乱させることがあります

これを 1 つのステップで完了しない場合

代わりにこのように使用してください

次のように形成された 2 つの .gch は、静的ライブラリをパッケージ化するコマンドでは認識されません。 

動的ライブラリを通じてコン​​パイル 1 して実行可能ファイルを形成する

 

おすすめ

転載: blog.csdn.net/m0_74234485/article/details/132631950