LinuxのC言語ライブラリパッケージ

私たちは、通常、他のプログラムで使用するためのライブラリの中に作られたいくつかのパブリック関数を置きます。

ライブラリは、静的および動的ライブラリの2種類に分かれています。
コンパイルされた静的ライブラリプログラムがオブジェクトコードに接続され、あなたは、もはや静的ライブラリプログラムが実行されている必要はありません。
プログラムはまた、動的なインベントリを実行する必要がありますので、ダイナミックアセンブリ時にライブラリとオブジェクトコードに接続されていないが、プログラムのみを実行していたが、ロードされます。

本論文では、一例としてだけでなく、それらを使用して、Linuxでの静的および動的ライブラリを作成する方法を説明するためのものです。

ステップ1:-hello.h得られた編集プログラムは、のhello.cとmain.cの例示;
hello.hライブラリのヘッダファイル(手順1を参照します)。
hello.c(手順2を参照)こんにちは、共通の機能を含むソースプログラムライブラリ、画面上でこの機能が出力されます「こんにちはXXX!」。
main.cのメインプログラムでは、メインプログラムファイルのテストライブラリ(プログラム3を参照)は、ハローパブリック関数を呼び出します。


プログラム1:hello.h

 #ifndef HELLO_H
 #define HELLO_H
 
 void hello(const char *name);
 
 #endif //HELLO_H

プログラム2:hello.cで

 #include <stdio.h>
 
 void hello(const char *name)
 {
 	printf("Hello %s!\n", name);
 }

プログラム3:main.cの

 #include "hello.h"
 
 int main()
 {
 	hello("everyone");
 	return 0;
 }

ステップ2:.oファイルにコンパイルのhello.c、
静的ライブラリ、またはDLLファイルが.oのによって作成されているかどうか。したがって、我々は最初の.oファイルでのgccのhello.cにソースコードをコンパイルする必要があります。
hello.oファイルを取得するためのプロンプトシステムで次のコマンドを入力します。
# gcc -c hello.c

私たちは、LSがhello.oファイルの生存かどうかを確認するためにコマンドを実行します。
# ls
hello.cのhello.h hello.oのmain.c

結果をlsコマンドでは、我々はhello.oファイルを参照して、この手順は完了です。


ステップ3:ファイルの.o静的ライブラリを作成し、
静的ライブラリファイル名の命名は、静的ライブラリ名、拡張子.Aと続く、LIBが付いています。例えば:私たちはMyHelloと呼ばれる静的ライブラリを作成し、静的ライブラリのファイル名はlibmyhello.aです。あなたは、静的ライブラリを作成し、使用するときは、この点に注意を払う必要があります。arコマンドで静的ライブラリを作成します。
静的ライブラリファイルlibmyhello.aを作成するためのプロンプトシステムで次のコマンドを入力します。
# ar cr libmyhello.a hello.o

:我々はまた、結果を表示するために、lsコマンドを実行する
# ls
のhello.cのmain.c hello.h hello.o libmyhello.a


ステップ4:使用するプログラムでの静的ライブラリ、
静的ライブラリが終わっ作り、どのように機能し、それの内部?これらのプロトタイプ宣言パブリック関数のソースのこれらの公益的機能の使用に含まれる必要があり、コマンドのgccでオブジェクトファイルを生成するときに、静的ライブラリ名を指定するだけ、GCCは、ライブラリ内のpublic static関数からターゲットファイルに接続します。注、gccがライブラリ名の前に静的libに接頭辞、その後、静的ライブラリファイル名の拡張子を追加しますが、静的ライブラリファイルを見つけるために取得.A。
プログラム3では:main.cの、私たちはヘッダファイルhello.h静的ライブラリが含まれ、その後、メインのメインプログラムで直接パブリック関数のハローを呼び出します。氏は、以下のターゲットプログラムとしてハロー、ハロー、その後、プログラムを実行し、何が起こるかを参照してください。
# gcc -o hello main.c -L. -lmyhello
# ./hello
みなさん、こんにちは!

私たちは、パブリック関数のハローが本当にハロー内のターゲット・ファイルに接続するかどうかの静的ライブラリファイルを削除してみてください。
# rm libmyhello.a
# ./hello
みなさん、こんにちは!
いつも、静的ライブラリがすでにターゲット・ファイル内のパブリック関数に接続されているように、プログラムが実行されています。


ステップ5:.oファイルによってDLLファイルを作成し、
動的ライブラリファイルの命名名と類似の静的ライブラリのファイル名の命名規則は、だけでなく、動的なライブラリ名の接頭辞libに増加しますが、ファイル拡張子は.soです。例えば:私たちはMyHelloと名前の動的ライブラリを作成し、その後、動的ライブラリのファイル名はとてもlibmyhello ..です GCCは動的ライブラリを作成するために使用されます。
動的ライブラリファイルはlibmyhello入手するためのプロンプトシステムで次のコマンドを入力します。Soが
# gcc -shared -fPCI -o libmyhello.so hello.o

我々はまだLSがダイナミックリンクライブラリファイルが生成されるかどうかを確認するためにコマンドを使用します。
# ls
hello.cのhello.h hello.o libmyhello。そうmain.cの


ステップ6:ダイナミックライブラリプログラムを使用して、
またソースに一般的に使用される関数プロトタイプ宣言これらのパブリック関数を含み、その後目標指令GCCを生成全く同じプログラムを、動的ライブラリを使用して静的ライブラリの使用ファイルは動的ライブラリの名前のコンパイル時間を示しています。私たちは、ターゲットファイルを生成するために、gccのコマンドを実行し、結果を確認するためにそれを実行します。
# gcc -o hello main.c -L. -lmyhello
# ./hello
./hello:エラーが読み込み中に、共有ライブラリ: libmyhello :.は、オブジェクトファイル共有開くことができないので:そのようなファイルやディレクトリ
ああ!間違いました。エラーメッセージで簡単に見、本来のダイナミックライブラリファイルがlibmyhello見つけることができません。Soが プログラムの実行は、それが動的ライブラリファイルは/ usr / libと/ libと他のディレクトリを見つける必要があります。見つかった場合、動的なロード・ライブラリーは。そうでなければ、プログラムは上記の動作と同様のエラーで終了しました。私たちは、ディレクトリは/ usr / libににlibmyhello.soファイルをコピーし、しようとします。
# mv libmyhello.so /usr/lib
# ./hello
みなさん、こんにちは!
成功。また、さらにダイナミック・ランタイム・ライブラリが必要とされている示しています。
我々は振り返ると、それを使用するのgccコマンドライブラリ、その時に静的および動的ライブラリは、ときに、同じ名前、まったく同じ静的および動的ライブラリの使用は、gccのコマンド・ターゲット・プログラムの使用にコンパイルことがわかりましたか?問題のホールディングは、気分はそれを試してみることにし、最終的に訴えられるだろう。
最初の削除に加えて私達の状態に復元し、すべての.cおよび.hファイルは、単にサンプルプログラムの編集を終えました。
# rm -f hello hello.o /usr/lib/libmyhello.so
# ls
hello.cのhello.hのmain.c

再びlibmyhello libmyhello.a静的ライブラリファイルと動的ライブラリファイルを作成する。Soが
# gcc -c hello.c
# ar cr libmyhello.a hello.o
# gcc -shared -fPCI -o libmyhello.so hello.o
# ls
hello.cのhello.h hello.o libmyhello.a libmyhello。そうmain.cの

最後のls上記のコマンドによって、あなたは、生成されたlibmyhello.so libmyhello.a静的ライブラリファイルと動的ライブラリファイルを検索し、現在のディレクトリにあることができます。その後、我々は、ハローオブジェクトファイルを生成MyHelloとライブラリを使用して、プログラムのhelloを実行するためのgccコマンドを実行します。
# gcc -o hello main.c -L. -lmyhello
# ./hello
./hello:共有ライブラリをロード中にエラー: :.は、オブジェクトファイルを共有開くことができませんのでlibmyhello:そのようなファイルまたはディレクトリ

静的と同じ名前、GCCコマンドの動的ライブラリは、動的ライブラリの使用を優先させて頂きます際には、ハロープログラムの実行結果から知ることが容易です。

公開された21元の記事 ウォン称賛11 ビュー20000 +

おすすめ

転載: blog.csdn.net/hexf9632/article/details/95168938