1つは、静的ライブラリを知っている
- 接尾辞として.aを使用します。Linuxでは一般にlibxxx.aという名前です。
- プログラムが静的ライブラリを使用する場合、リンカ(ld)はlibxxx.a全体のすべての関数を実行可能ファイルにコピーします。
2.長所と短所
利点:静的ライブラリを使用する場合、実行可能ファイルにコンパイルした後、実行時にライブラリに依存しません。
短所:実行可能ファイルが大きく、静的ライブラリが変更されたため、実行可能ファイルを再生成する必要があります。
3、静的ライブラリを作成して使用する方法
ツール:ar、オブジェクトファイル.oを別の静的ライブラリにパッケージ化します。
Linuxで静的ライブラリを作成する手順:
- ソースコードファイルの編集(.c、.cpp)
- オブジェクトファイル* .oからgcc-c * .cを生成するか、g ++ -c * .cppを折りたたむ
- arを使用してオブジェクトファイルをパッケージ化し、静的ライブラリを生成します
- 静的ライブラリのヘッダーファイルを提供します(つまり、静的ライブラリによって提供されるサービスインターフェイスなどの* .hファイル)
arコマンドの使用:
语法:ar [-] {dmpqrtx} [abcfilNoPsSuvV] [membername] [count]アーカイブファイル..
パラメータ:
命令パラメータ
-dライブラリファイル内のメンバーファイルを削除します
-mライブラリファイル内のメンバーファイルの順序を変更します
-pは、ライブラリファイル内のメンバーファイルの内容を表示します
-qライブラリファイルの最後にファイルを追加します
-rファイルをライブラリファイルに挿入します
-tは、ライブラリファイルに含まれるファイルを表示します
-xライブラリファイルからメンバーファイルを削除します
オプションパラメータ
a <メンバーファイル>ライブラリファイルで指定したメンバーファイルの後にファイルを挿入します。
b <メンバーファイル>ライブラリファイルで指定されたメンバーファイルの前にファイルを挿入します。
cライブラリファイルを作成します。
f長いファイル名が他のシステムのarコマンドと互換性がないことを回避するために、このパラメーターを使用して、ライブラリファイルに配置される長いメンバーファイル名を切り取ることができます。
i <メンバーファイル>ライブラリファイルで指定されたメンバーファイルの前にメンバーを挿入します。
oファイルの日付をライブラリファイルに保存します。
■オブジェクトモードがライブラリファイルに含まれている場合、このパラメータを使用して、保存するファイルのシンボルテーブルを作成できます。
Sはシンボルテーブルを生成しません。
u新しい日付のファイルのみをライブラリファイルに挿入します。
vプログラムの実行時に詳細情報を表示します。
Vバージョン情報を表示します。
四、栗
test.h
int add(int a, int b);
test.cpp
#include "test.h"
int add(int a, int b)
{
return (a + b);
}
コンパイル:
[xy@xunye ar]$ g++ -c test.cpp
[xy@xunye ar]$ ls
test.cpp test.h test.o
静的ライブラリを作成します。
[xy@xunye ar]$ ar rcs libtest.a *.o
[xy@xunye ar]$ ls
libtest.a test.cpp test.h test.o
静的ライブラリを使用する:
main.cpp
#include "test.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
cout << add(3, 2) << endl;
return 0;
}
実行可能ファイルを作成します。
[xy@xunye use_lib]$ ls
libtest.a main.cpp test.h
[xy@xunye use_lib]$ g++ -o main main.cpp -L. -ltest
[xy@xunye use_lib]$ ls
libtest.a main main.cpp test.h
[xy@xunye use_lib]$ ./main
5
説明:-Lは、静的ライブラリを検索するためのg ++のパスを指定します。「。」は現在のパスで検索することを意味します
-lは特定のライブラリを指定し、その中でlibと.aは表示せずに書き込むことができます
[注]ライブラリでgccまたはg ++を検索する順序:最初に動的ライブラリ.soを探し、見つからない場合は静的ライブラリ.aを探します。