1. 生成方法
- 静的ライブラリの生成
g++ -c add.cc -o add.o
g++ -c del.cc -o del.o
ar rcs libapi.a del.o add.o
g++ -static main.cc -o static main -L./ -lapi -l./
./static main
- 動的ライブラリの生成
g++ -c add.cc -o add.o
g++ -c del.cc -o del.o
g++ -shared -fPIC -o libapi.so del.o add.o
g++ main.cc -o dynamic main -L./ -lapi -l./
export LD LIBRARY PATH=$LD LIBRARY PATH:/home/mark/interview/ccplus/lib
./dynamic main
2. リンク方法
-
静的リンクは
静的ライブラリをターゲット ファイルにコンパイルします。 -
動的リンクでは
、ライブラリはターゲット ファイルにコンパイルされません。
実行中のコードはプログラムの実行時にロードされます: アドレス非依存コード テクノロジ - fPIC。ロード中の再配置は
構文チェックのみを行います。
3. 空間占有
静的ライブラリには複数のコピー (メモリとディスク) が存在します。
ダイナミック ライブラリのコピーは 1 つだけあります
4. 使用方法
静的ライブラリが配置されているプログラムは直接実行されます。
ダイナミック ライブラリが配置されているプログラムは動的にロードされます。 注: プログラム環境では、ダイナミック ライブラリの検索パス LD LIBRARY PATH を指定する必要があります。
5.実行速度
静的ライブラリは高速ですが、動的ライブラリは低速です
6. ライブラリファイルの変更
インターフェースの変更: すべて再コンパイルする必要があります
インターフェイス実装の変更: 静的ライブラリは再コンパイルする必要がありますが、動的ライブラリは再コンパイルのみが必要です。
Lingsheng Academy のプロジェクト クラスをお勧めします。個人的には先生の教え方が上手だったと思います。共有したいと思います:
Lingsheng Platinum Learning Card (インフラストラクチャ/高性能ストレージ/golang クラウド ネイティブ/オーディオとビデオ/Linux カーネルを含む)
https://xxetb.xet .tech/s/VsFMs