13

私のコンパイラ ( MinGW ) とWindows 8 SDKの両方に同じライブラリが付属しており、命名規則を保存していることに気付きました (つまりwin32.lib、Windows 8 SDK はlibwin32.aMinGW ライブラリにあります)。

  • すべてのコンパイラにこのようなライブラリが付属していますか?
  • これらのライブラリは複数のオペレーティング システムに対応していますか?
  • Windows 8 SDK に付属するライブラリとコンパイラに付属するライブラリの違い (ある場合) は何ですか?
4

2 に答える 2

7

ライブラリには次の 2 種類があります。

  • インポート ライブラリ:これらのライブラリは、変数/関数/などへの参照を見つける場所のみをリストしますが、コード自体は含まれ
    ていません。

  • 「通常の」ライブラリ (マシン コードを含むオブジェクト ファイルを含む):
    これらのライブラリには、実際のマシン コードを含むオブジェクト ファイルが含まれます。

オペレーティング システムに同梱されているライブラリは、通常、インポート ライブラリです。
結局のところ、実際のコードはオペレーティング システム自体にあります。インポート ライブラリは、オペレーティング システムで提供されるコードの使用方法を示すだけです。
なぜこれが必要なのですか?プログラムは、実行中にオペレーティング システムで使用可能なライブラリを「検出」する方法がないため、プログラムは、コンパイル時にが使用可能になるかを認識している必要があります。

コンパイラに付属しているものは、通常はコード ライブラリです。これらには、プログラムをコンパイルするためにコンパイラーが必要とするコード (特定のコンパイラーによって異なります) が含まれています。

ただし、ライブラリの「標準形式」は 1 つではありません。Microsoft は COFF を使用しますが、*nix ツールは ELF を使用します。
そのため、Microsoft がシステム用のインポート ライブラリを出荷するときは、COFF 形式でのみ出荷します。これは、Visual C++ コンパイラには適していますが、他のコンパイラにはあまり役に立ちません。

これにより、MinGW などのコンパイラ ベンダーは、対象とするオペレーティング システム用に独自のインポート ライブラリを作成することを余儀なくされます。これらのライブラリの目的は、オペレーティング システム ベンダー (Microsoft など) が提供するものとまったく同じです。 、しかしそれらの形式は異なります。

そのため、一見似たようなライブラリが複数の方法で提供されています。

于 2013-05-12T23:50:12.400 に答える
2

MinGW には独自の SDK ライブラリ セットが付属しています。これは、MinGW が Windows プログラムを生成できる自由に利用できるコンパイラの実装を提供することを目的としているという単純な理由からです。Microsoft Windows SDK のライセンスのため、MinGW コンパイラで簡単に配布できるものではありません。そのため、MinGW の開発努力の重要な部分は、Microsoft のライセンス条件を侵害することなく Windows SDK 機能を提供する一連のヘッダーとライブラリです。

MinGW WinSDK のかなりの部分がパブリック ドメインです (ほとんどまたはすべて)。これらはすべて、自由に配布できるオープン ソースです。

MS のオブジェクト ファイルとライブラリを使用する MinGW との互換性の問題もあるかもしれませんが、MinGW が MS コンパイラによって生成されたオブジェクト ファイルとライブラリにリンクできることが多いことに驚きました (ただし、それが保証されているかどうかはわかりません)。サポートされています)。

関連する問題は、MinGW が Microsoft が提供する msvcrt.dll C ランタイム DLL に大きく依存していることです。しかし、その DLL は MinGW によって配布されるわけではありません。これはすべての Windows OS の一部であるため、MinGW は基本 OS 機能として存在することに依存しています。

于 2013-05-13T08:59:42.647 に答える