C++ ダイナミック ライブラリとスタティック ライブラリの違いは何ですか?

1. 生成方法

  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
  1. 動的ライブラリの生成
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. リンク方法

  1. 静的リンクは
    静的ライブラリをターゲット ファイルにコンパイルします。

  2. 動的リンクでは
    、ライブラリはターゲット ファイルにコンパイルされません。
    実行中のコードはプログラムの実行時にロードされます: アドレス非依存コード テクノロジ - fPIC。ロード中の再配置は
    構文チェックのみを行います。

3. 空間占有

静的ライブラリには複数のコピー (メモリとディスク) が存在します。

ダイナミック ライブラリのコピーは 1 つだけあります

4. 使用方法

静的ライブラリが配置されているプログラムは直接実行されます。

ダイナミック ライブラリが配置されているプログラムは動的にロードされます。 注: プログラム環境では、ダイナミック ライブラリの検索パス LD LIBRARY PATH を指定する必要があります。

5.実行速度

静的ライブラリは高速ですが、動的ライブラリは低速です

6. ライブラリファイルの変更

インターフェースの変更: すべて再コンパイルする必要があります

インターフェイス実装の変更: 静的ライブラリは再コンパイルする必要がありますが、動的ライブラリは再コンパイルのみが必要です。


Lingsheng Academy のプロジェクト クラスをお勧めします。個人的には先生の教え方が上手だったと思います。共有したいと思います:
Lingsheng Platinum Learning Card (インフラストラクチャ/高性能ストレージ/golang クラウド ネイティブ/オーディオとビデオ/Linux カーネルを含む)
https://xxetb.xet .tech/s/VsFMs

おすすめ

転載: blog.csdn.net/qq_40135848/article/details/132942874