2019年9月25日
キーワード:ライブラリーを構築し、静的ライブラリの参照、動的ライブラリリファレンス
Cの開発では、「ライブラリー」はしばしば聞いた用語です。
いわゆるライブラリーは、実際にはバイナリファイルです。バイナリファイルの内容は、他のCプログラムの呼び出しによって行うことができる機能です。換言すれば、ライブラリのみCコードのセットとしてパッケージされ、パッケージが生成されたライブラリーの形でファイルコンパイルされたソースコードを指します。
それだけでソースコードをパッケージ化だ場合でもしかし、それはまだシステムのプロプライエタリな性質によってコンパイルされ、異なるシステムが互いにライブラリの使用と互換性がありません。
Cライブラリは、に分けることができ、動的ライブラリと静的ライブラリ二種類。ライブラリとでプログラムのソースコードとの関係を扱います、コンパイル時にライブラリの外に参照アプリケーション「リンク期間。」
1、静的ライブラリ
静的ライブラリ名は、それは、「ダイナミック共有」、静的ライブラリへのすべての参照は、コンパイル時にコンパイラは静的ライブラリで行くプログラムではありません、示唆、静的ライブラリは、そのプログラムへの直接参照にパッケージ化されようとしています。
静的ライブラリファイルのサフィックスは.Aあり、それは多くの場合、ファイルが言われています。
静的ライブラリには、次の特性があります。
図1に示すように、ライブラリは、直接ソース、直接コンパイル時に実行可能プログラムに充填ソース・ライブラリーを含みます。
2、高速であるライブラリファイルをロードせずに、実行時に、
3、静的ライブラリは、より多くのディスク領域を占有する必要があります参照。
4、静的データベースのアップグレードは、そのプログラムへのすべての参照を再コンパイルする必要があります。
静的ライブラリを作成します。
1、プロトタイプの設計ライブラリ。
図2に示すように、コードベースと、
3、コンパイラはOライブラリのソースコードファイルを生成します:gccの-c -Wall xxx.c。
4、静的ライブラリファイルを生成するために、ARコマンドファイルによってO:AR CRS libxxx.a xxx.o。
5、静的ライブラリ情報は、nmコマンドを介して見ることができます:NM libxxx.a
Linuxでの静的ライブラリの名前は、接尾辞として.Aために、LIBで始める必要があり、ルールです。
静的ライブラリを呼び出します。
図1は、関数プロトタイプで宣言されたソースコードの静的ライブラリ関数を参照する必要性は、通常、静的ライブラリファイルは、外部プログラムの使用に特異的に呼ばれるヘッダ・ファイルを提供します。
2、必要に応じて直接呼び出し機能静的ライブラリ。
3、コンパイラ:gccの-o XXX2 xxx2.c -L -lxxx。
-Lライブラリ検索パスを設定することです。これを明示的になります行くようにコンパイラに伝えるために、GCCは、は/ usr / libと他の公式リポジトリのディレクトリを見つけるために/ libにコンパイル時にデフォルト設定されますが、私たちは、必ずしもこれらのディレクトリにコンパイルされ、静的ライブラリをしません。ドットの後ろには、現在のディレクトリ内のライブラリを見つけることを意味します。
-lxxxは、ライブラリの名前をリンクするために指定されています。ここでは、注意しなければならない、-lライブラリ名ではなく、ライブラリ・ファイルの名前の後ろに接続され、単にライン上のライブラリlibの接頭辞と接尾辞.aという、文字列の前にファイル名の後に削除されることを理解。
また:.のgcc -o XXX2 xxx2.c -L -static -lxxx別のコンパイラオプションを使用することができます
図4は、コンパイルが完了すると、あなたは直接プログラムを実行することができます。
2、動的ライブラリ
DLLと静的ライブラリの反対、それはの「グローバル共有」です。プログラムは、シンボルをコンパイルするときに使用され、ライブラリコードはスタティックライブラリとして本出願に一緒にパッケージされていないとだけ共有ライブラリを記録する共有ライブラリを参照した後。
したがって、動的ライブラリの特性を本質的に静的ライブラリ反対。
1、小さな結果をコンパイル。
図2に示すように、複数のプログラムが同一のベースを共有することができます。
3、あなたは共有ライブラリのランタイムをロードする必要があります。
4、アップグレードがライブラリに動的ライブラリファイルの直接交換で、一般的に、参照ライブラリを再コンパイルする必要はありません。
動的ライブラリの作成:
1、プロトタイプの設計ライブラリと実装コード。
図2に示すように、コンパイルされた共有ライブラリのソースコード生成Oファイル:GCC -c FPIC xxx.c -Wall。
3、Oファイルは、共有ライブラリファイルとして生成:GCC -shared -o libxxx.so.1 xxx.o。
静的ライブラリに似たライブラリファイルの命名規則を共有、固定プレフィックスとサフィックスを持っています。xxxは、ライブラリのミドルネームです。.soファイルがDLLファイルであることを示しています。バージョン複数の要求を達成することができる共存するように.1一般ライブラリのバージョン番号、ライブラリを表します。
4、共有ライブラリファイルへのシンボリックリンクを作成します。ln -s libxxx.so.1 libxxx.soを。
参考動的ライブラリ:
1、ステートメントライブラリ関数インタフェース、上記スタティックライブラリの参照方法と一致。
2.コンパイル:gccの-o XXX2 xxx2.c -L -lxxx。
ライブラリを参照する際のgcc、動的ライブラリを探します。最初は、動的ライブラリはスタティックライブラリのみを検索した場合に見つけることができない、静的ライブラリは、エラーを見つけることができません。
3、プログラムの実行。
Linuxのデフォルトの動的ライブラリは、わずか数デフォルトのディレクトリを見つけて、我々は動的ライブラリを見つけることができないエラーが報告され、動的ライブラリは、デフォルトのライブラリディレクトリにないコンパイルされた場合、実行時にロードします。解決策は以下のとおりです。
1、拡張ライブラリのロードパス:輸出LD_LIBRARY_PATH = XXX:$のLD_LIBRARY_PATH; xxxのパスは、この動的なライブラリファイルを持つことです。
2、デフォルトのライブラリディレクトリにこの動的ライブラリ:/ libには/ usr / libに。
3、新/etc/ld.so.conf.d/xxx.confファイルは、このファイル内の私達の動的ライブラリのパスを記入後のシステム変数を更新するにldconfigコマンドを再実行のためにそれを保存します。