静的ライブラリ動的ライブラリのレビュー
1530 ワード
ダイナミックライブラリ静的ライブラリの概念
静的ライブラリの概念は、複数のプログラムのコンパイルに同じサブモジュールが必要であるという問題から生じる.静的ライブラリの解決方法は、いくつかのサブモジュールをそれぞれリダイレクト可能なバイナリファイル(.o)にコンパイルし、ツールを介して静的ライブラリにパッケージ化することであり、チェーン接続中にどのシンボルが欠けているかを静的ライブラリから問い合わせることである.対応する定義を抽出します.したがって、静的ライブラリは
しかし,静的ライブラリはリンクのたびに自身のプログラムシートを対応するプログラムにコピーし,バイナリファイルを形成するため,メモリの浪費問題をもたらす.ほとんどのプログラムが
静的ライブラリ動的ライブラリの生成
静的ライブラリと動的ライブラリの生成はlinuxの対応するツール
次のコマンドを使用して静的ライブラリを生成します.
ここで、
静的ライブラリ情報の理解
ライブラリファイルのターゲットファイル、ファイル名、サイズ、時間などの情報が表示されます.
次のコマンドを使用して動的ライブラリを生成します.
sharedは共有ライブラリの生成を指し、fPICは位置に関係のないコードの生成を指す(絶対アドレスがなく、相対アドレスのみ、コードがローダによってメモリの任意の位置にロードされ、正しく実行される).
静的ライブラリの概念は、複数のプログラムのコンパイルに同じサブモジュールが必要であるという問題から生じる.静的ライブラリの解決方法は、いくつかのサブモジュールをそれぞれリダイレクト可能なバイナリファイル(.o)にコンパイルし、ツールを介して静的ライブラリにパッケージ化することであり、チェーン接続中にどのシンボルが欠けているかを静的ライブラリから問い合わせることである.対応する定義を抽出します.したがって、静的ライブラリは
.o
ファイルの集合と見なすことができ、コンパイルで必要なものをそれぞれ取得します.linuxでのフォーマットは.a
です.しかし,静的ライブラリはリンクのたびに自身のプログラムシートを対応するプログラムにコピーし,バイナリファイルを形成するため,メモリの浪費問題をもたらす.ほとんどのプログラムが
printf.o
を使用し、静的ライブラリを使用すると、すべてのプログラムのバイナリファイルにprintfコードのコピーが付いていることを意味し、オーバーヘッドが大きくなります.また、静的ライブラリの関数のメンテナンスにも問題があり、使用者は使用前に現在のバージョンと現在の静的ライブラリの機能を理解する必要があります.ダイナミックライブラリは上記の2つの問題を解決し、まず、ダイナミックライブラリは作成後、他のプログラムとのリンク中に、他のプログラムはダイナミックライブラリのパスが含まれているだけで、シンボル情報は直接シンボルを解析していないが、プログラムが近接メモリにロードされて実行されている間に、動的に必要なファイルをロードしてから、リダイレクト操作を行う.また、ダイナミックライブラリの修正後、新しいダイナミックライブラリを元のダイナミックライブラリに置き換えるだけで、次のプログラムの実行中に性能更新を実現できるので、ダイナミックライブラリも実はメインプログラムと一部の機能の隔離を実現し、一部の機能コンポーネントの「ホットスワップ」を実現することができます.静的ライブラリ動的ライブラリの生成
静的ライブラリと動的ライブラリの生成はlinuxの対応するツール
ar
とgcc
を使用します.次のコマンドを使用して静的ライブラリを生成します.
ar rcs libXXX.a XX1.o XX2.o
ここで、
r
は、ライブラリにモジュールを挿入(置換)することを意味するc
は、ライブラリを作成することを意味するs
は、ターゲットファイルインデックスを作成することを意味する静的ライブラリ情報の理解
ar -tv libXXX.a
ライブラリファイルのターゲットファイル、ファイル名、サイズ、時間などの情報が表示されます.
次のコマンドを使用して動的ライブラリを生成します.
gcc -shared -fPIC -o libXXX.so XXX.o
sharedは共有ライブラリの生成を指し、fPICは位置に関係のないコードの生成を指す(絶対アドレスがなく、相対アドレスのみ、コードがローダによってメモリの任意の位置にロードされ、正しく実行される).