arを使用して静的ライブラリを作成します

1つは、静的ライブラリを知っている

  1. 接尾辞として.aを使用します。Linuxでは一般にlibxxx.aという名前です。
  2. プログラムが静的ライブラリを使用する場合、リンカ(ld)はlibxxx.a全体のすべての関数を実行可能ファイルにコピーします。

2.長所と短所

利点:静的ライブラリを使用する場合、実行可能ファイルにコンパイルした後、実行時にライブラリに依存しません。

短所:実行可能ファイルが大きく、静的ライブラリが変更されたため、実行可能ファイルを再生成する必要があります。

3、静的ライブラリを作成して使用する方法

ツール:ar、オブジェクトファイル.oを別の静的ライブラリにパッケージ化します。

Linuxで静的ライブラリを作成する手順:

  1. ソースコードファイルの編集(.c、.cpp)
  2. オブジェクトファイル* .oからgcc-c * .cを生成するか、g ++ -c * .cppを折りたたむ
  3. arを使用してオブジェクトファイルをパッケージ化し、静的ライブラリを生成します
  4. 静的ライブラリのヘッダーファイルを提供します(つまり、静的ライブラリによって提供されるサービスインターフェイスなどの* .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を探します。

おすすめ

転載: blog.csdn.net/xunye_dream/article/details/110727531