[転載] WindowsおよびLinuxシステムで導入されたライブラリ

ライブラリWindowsおよびLinuxシステムで導入

 

定義されたライブラリー

ライブラリは、プリコンパイルされた関数の集合体である、それらの機能が書かれた再利用可能なの原則に従っています。これらは通常互いに関連した一般的な一連のタスクを完了するために使用される特定の機能で構成され、基本的にライブラリがメモリにオペレーティング・システムによって実行可能なバイナリ実行可能コードされるフォーム。

WindowsプラットフォームまたはLinuxプラットフォーム上のかどうかは、ライブラリが多数ありますが、理由はWindowsとLinuxので、2つのバイナリライブラリの異なる性質の互換性がありません。

クラスライブラリ

Windowsの下のライブラリは、2があります。静的ライブラリ(.libファイル)とダイナミックリンクライブラリ(.dllファイル)。

Linuxでのライブラリーは、2があります。静的ライブラリ(.A)と共有ライブラリ(.soという)。

一般xxxxはLIBの名前ですlibxxxx.a、あるLinux用の静的ライブラリに名前を付け

Linuxでの動的ライブラリの名前は、LIB年代の名でXXXX、一般的であるlibxxxx.so.major.minor、主要なマイナーメジャーバージョン番号は、マイナーバージョン番号です。

類似点とライブラリとWindowsでLinuxでのライブラリとの違い

LinuxはWindowsのダイナミックリンクライブラリ(.dll)としてライブラリ(.soという)を共有し、それは多くのプログラムが共通の機能を持っている含まれています。プログラム開発を容易にし、冗長な手順を減らすためには、単に共有ライブラリの関数を呼び出す、一般的に使用される機能のそれぞれのコピーが含まれていない手順は、多くの場合、必要なことができるとき。このように、我々は、ダイナミックリンク(ダイナミックリンク)を呼び出します。そして、時には私たちは、プログラムが関数呼び出し共有ライブラリを呼び出す必要はありませんが、ライブラリ関数のコードは、プログラムコードに直接リンクされている、つまり、プログラム自体は、共有ライブラリ関数のコピーを持っています。このように、我々は(静的にリンク)静的リンクを呼び出します。

だから、単に静的および共有ライブラリ(DLL)の違いは、異なるコードは現時点でロードされていることであると言います。

コードの静的ライブラリは、コンパイル時に実行可能なプログラムをロードし、そのため大きなされています。

共有ライブラリのコードは、コンパイルプロセスにおける単純な参照、したがってより小さなコードサイズが実行可能プログラムを実行しているときにのみメモリにロードされます。

LinuxでWindowsでダイナミックリンクライブラリの違い(.dllファイル)共有ライブラリ(.soが)

ファイルと.exeファイルの.dll実際には、PE実行可能ファイル形式を属します。外部シンボルへの暗黙の参照のために、あなたはPEの頭の中で外部シンボルの場所を記述する必要があります。頭からPE PEローダーは、シンボルテーブルの依存性を見つけ、他の.dllファイルが依存ロードします。

そして、Linuxのケースではありません!.soファイルほとんどELF実行ファイルフォーマット。彼らは外部シンボルを必要とするときは、配置されてこれらのシンボルの場所を指定することはできません。自身がそれを知っていないことを通常の.soファイルが.soの内部にどのようなこれらのシンボルに依存します。dlopenの際にこれらの記号は、呼び出しプロセスによって実行を提供しています。

我々は、Windowsでの.dllファイルもの.libファイルを実行する必要がありますやった、とLinuxで、唯一の適切なヘッダファイルを持っていることは十分です。新しいの.soの調製のために、あなたが一緒に共同すべてのシンボルのニーズへの最終的な実行可能ファイルまでのシンボルを見つけることができません。しかし、一般のLinuxの.soと暗黙の依存関係があります。だからを聞かせする必要はありません。別のウィンドウが.dllファイルの暗黙の信頼を.dllをがあるかもしれません。

この記事の更新への固定リンク:http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/11361099.html
おすすめ