0

私の知る限り、.libファイルはある種のコンパイル済みファイルであり、もちろんdllファイルにはすべての関数が含まれています。.libファイルまたは.dllファイルだけで実行できないのはなぜですか?なぜ3つすべてを取得するように指示されているのですか?

ちなみに、openGLファイルは「freeGLut」があるのにとにかく無料ではありませんか?

4

3 に答える 3

4
  • glut32.hコンパイル段階で使用されるヘッダーファイルです
  • glut32.libライブラリによって提供される関数やオブジェクトへの参照を解決するためにリンカによって使用されるライブラリファイルですglut32。DLLで使用する場合、.libファイルは「インポートライブラリ」と呼ばれることが多く、実際のコードの代わりに、実行可能ファイルがDLL内の関数を暗黙的に参照するようにするためにリンカーが使用する情報が含まれているため、ランタイムローダーもDLLをロードします。実行可能ファイルが実行時にロードされるとき。implib一部のツールチェーンは、DLLを入力として使用してインポートライブラリを生成できるツール(通常はと呼ばれます)を提供します。
  • glut32.dll実行時に関数とオブジェクトを提供するために実行時に使用されるダイナミックライブラリです。

一部のツール(GCCツールチェーンなど)は、.libファイルの代わりにDLLを直接使用でき、事実上、独自のimplib機能を提供します。Microsoftがツールでそれをサポートしていない理由はわかりません。

于 2012-07-19T00:45:31.387 に答える
4

私の知る限り、.libファイルはある種のコンパイル済みファイルであり、もちろんdllファイルにはすべての関数が含まれています。

いいえ、それほど単純ではありません。

DLLは実行可能なバイナリであり、スタートアップエントリポイントを除いたものです。DLLはいくつかのシンボルをエクスポートしますが、それらは機能がなく、アドレス空間内の位置のみです。コンパイラは、標準のDLL(またはSO)から各シンボルの署名を推測することはできません。このためには、追加のソースを介して何らかの方法で署名を通知する必要があります。これはヘッダーファイル(.h)です。

ただし、実際に役立つようにするには、実行時にDLLをプロセスにロードする必要があります。このためには、実行可能ファイルに追加情報、つまりロードするDLLを追加する必要があります。Windowsでは、これはスタブライブラリ(.lib)を使用して実行され、DLLインポート情報を伝達するだけです。他のOSでは、リンカーをそのDLLにポイントすることにより、「DLL」に対してリンクします。

.libファイルまたは.dllファイルだけで実行できないのはなぜですか?

.libには実際のコードは含まれておらず、情報のみが含まれているため、特定のDLLを使用します。また、MicrosoftツールはターゲットDLLからダイナミックリンケージ情報を取得できないためです。

なぜ3つすべてを取得するように指示されているのですか?

各ファイルには特定の機能があり、3つすべてが必要なためです。

  • 関数シグネチャを取得する(.h)
  • 実行可能ファイルに特定のDLL(.lib)をロードするように指示します
  • .dllの形式で実際のライブラリを取得します

ちなみに、openGLファイルは「freeGLut」があるのにとにかく無料ではありませんか?

GLUTはOpenGLの一部ではありません。独自に開発したライブラリです。また、OpenGL自体は単なる仕様であり、「the」OpenGLソースはありません。特定の実装のみがあり、そのうちのいくつかは無料です。

于 2012-07-19T00:54:16.153 に答える
3

GLUTはオプションのコンポーネントです。プログラムで使用されていない場合は必要ありません。ただし、これを使用する場合はglut.h、プログラムがそれを使用する必要があります。また、リンカーが実行可能ファイルとDLLの関係を確立するために使用するインポートライブラリであるため、#include必要です。プログラムをコンパイルまたはリンクするときは必要ありませんが(インポートライブラリがその目的を果たすため)、プログラムが呼び出す実際のGLUT関数が含まれているため、プログラムを実行するときに必要になります。glut32.libglut32.dll

Freeglutは元のGLUTのオープンソースクローンです。元のGLUTは古く、そのライセンスでは他の人が変更して改善することができないためです。

于 2012-07-19T00:48:16.490 に答える