1.まず、動的ライブラリが何であるか、静的ライブラリが何であるかを教えて?
静的ライブラリ:
これらのライブラリの名前は、一般的にlibxxx.a、彼の利点は、コンパイルされたプログラムの実装ことが明らかとなり、全体のライブラリのすべてのデータがオブジェクトコードに統合されるため、ファイルにコンパイル静的ライブラリの使用が大きく、外部ライブラリのサポートの必要性、すべての機能の使用は、実行可能ファイルにコンパイルされているからです。静的ライブラリが変更された場合、その後、あなたのプログラムが再コンパイルする必要があり、ボリュームが大きいのでもちろん、これは、彼の不利になります。
動的ライブラリ:
これらのライブラリの名前は、一般的にlibxxx.so、共有ライブラリとして知られている動的ライブラリされています。あなたは、相関関数にプログラムの実行を呼び出すときに静的ライブラリに比べ、ダイナミック・ライブラリコンパイル時とは、オブジェクトコードにコンパイルされていません関数は、関数ライブラリに対応し、したがって、生成された動的ライブラリの実行可能ファイルは比較的小さいです。ライブラリは、アプリケーションに統合ますが、動的なアプリケーションやプログラムを呼び出すされていないので実行されているので、プログラムの動作環境は、適切なライブラリを提供する必要があります。これより便利な動的ライブラリをアップグレードし、動的ライブラリは、あなたのプログラムに影響しません変更します。複数のアプリケーションが同じライブラリを使用する必要がある場合と、それは動的ライブラリのために非常に適している、アプリケーションのサイズを小さくすることができます。
2.生産図書館
生産の静的ライブラリ:
次いで①準備操作に対応* .cファイル、およびファイル・アセンブラ* .cファイルを変換する*の.oファイル
②実行AR -cr libxxxx.a * .oファイルを (説明:-c ---->が作成し、作成表し; -rは----->置き換え、置き換え表し、XXXX ----->ライブラリを表し名)
コンパイルのmain.cファイルとき③:。-Lxxxx GCC -oメインのmain.cの-L (-L .------->は、ルーティングリンクライブラリを表し、後者の場合は、覚えてい-L」。 );「カレントディレクトリを示します
④このとき、静的リンクライブラリプログラムだけで罰金、XXXXライブラリを削除することで、この時間は、プログラムの実装は影響を受けません。
動的ライブラリを確立
①准备相应操作的*.c文件,然后将*.c文件转换至汇编文件*.o文件
②创建动态库:gcc -shared -fpic -o libxxxx.so *.o (-shared------>表示动态库(共享库);-fpic--->产生位置无关代码;xxxx------>表示动态库的名字)
③编译main.c文件:gcc -o dynamic dynamic.c -L. -lxxxx
④执行./dynamic -------------------------------------会出错!!!!!!!!!!!!(找不到运行时依赖的动态库)
此时需要注意的是,我们现在还不能直接执行此程序,!!!!!!!!
我们需要在执行一步:export LD_LIBRARY_PATH="." --------------------将当前目录设置环境变量,负责程序将找不到运行时所需要的动态库
完成此步,就可以执行了。
⑤再执行:./dynamic. ---------------------------------OK