Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> WindowsとLinuxでのライブラリ入門

WindowsとLinuxでのライブラリ入門

  

ライブラリとはライブラリとは、再利用可能性の原則に従って書かれた、プリコンパイルされた関数の集まりです。ライブラリは、通常、共通のジョブを実行する相互に関連する一連の関数で構成されており、本質的には、オペレーティングシステムによってメモリにロードできるバイナリ形式の実行可能コードです。 WindowsプラットフォームとLinuxプラットフォームの両方に多数のライブラリーがありますが、WindowsとLinuxの性質上、ライブラリーのバイナリーには互換性がありません。ライブラリの分類Windowsには、スタティックライブラリ(.lib)とダイナミックリンクライブラリ(.dll)の2種類のライブラリがあります。 Linuxのライブラリには、静的ライブラリ(.a)と共有ライブラリ(.so)の2種類があります。 Linuxの静的ライブラリーの名前は通常libxxxx.a、xxxxはライブラリーの名前、Linuxの動的ライブラリーの名前は通常libxxxx.so.major.minor、xxxxはライブラリーの名前、およびメジャー・バージョン番号です。マイナーはマイナーバージョン番号です。 WindowsのライブラリとLinuxのライブラリの間の類似点と相違点Linux共有ライブラリ(.so)は、Windowsのダイナミックリンクライブラリ(.dll)に似ています。これには、プログラムで一般的に使用される多くの機能が含まれています。プログラム開発を容易にし、プログラムの冗長性を減らすために、プログラムは必要に応じて共有ライブラリ内の定数関数を呼び出すだけでよく使用される各関数のコピーを含める必要はありません。このように我々はそれを動的にリンクされたと呼びます。そして、プログラムを呼び出して共有ライブラリの関数を呼び出すのではなく、ライブラリ関数コードをプログラムコードに直接リンクしたい、つまりプログラム自体が共有ライブラリに関数のコピーを持っていることを望みます。このように我々はそれを静的リンクと呼びます。そのため、静的ライブラリと共有ライブラリ(動的ライブラリ)の単純な違いは、コードのロード時間が異なることです。静的ライブラリのコードはコンパイルプロセス中に実行ファイルにロードされているので、かさばります。共有ライブラリのコードは、実行可能ファイルの実行時にメモリにロードされますが、コンパイル時の単純な参照にすぎず、コードは小さくなります。 Windowsでのダイナミックリンクライブラリ(.dll)とLinuxでの共有ライブラリ(.so)の違い。 dllファイルは実際にはandです。 exeファイルと同様に、PE形式の実行可能ファイルに属します。外部シンボルを暗黙的に参照するには、外部シンボルの場所をPEヘッダーに書き込む必要があります。 PEローダーは、PEヘッダーから従属シンボルテーブルを見つけて、残りの依存関係をロードします。 dllファイルLinuxではそうではありません。 。 soファイルのほとんどは、elf実行可能ファイル形式です。外部シンボルが必要な場合は、これらのシンボルが配置されている場所を指定できません。それは、通常です。 soファイル自体は、それが依存しているシンボルを知りません。だから中です。これらのシンボルは、実行時にdlopenを呼び出すプロセスによって提供されます。私達はWindowsの下でそれをします。あなたはdllファイルを持っているときにも1つを運ぶ必要があります。 Libファイル; Linuxでは、一般的には対応するヘッダファイルがあれば十分です。新しいものを書くために。したがって、見つからなかったシンボルは、必要なすべてのシンボルを結合するためにファイルが最終的に実行されるまでそこに残すことができます。 Windowsは存在することができます。別のDl。 dllの暗黙の依存関係;通常Linuxでは必要ありません。だからそして。暗黙の依存関係もあります。

Copyright © Windowsの知識 All Rights Reserved