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 して実行可能ファイルを形成する