23

リンクに関してはわからないことがあります...サードパーティのライブラリ(GEOSライブラリ)を使ってプログラムを書いています。このプログラムはgeos.libに依存していますが、実行するにはgeos.dllが必要です。

私はこの質問を読みました。静的ライブラリと動的ライブラリの違いを理解していると思います。私が理解していないのは、ライブラリを静的にリンクするときにdllが必要な理由です。

4

5 に答える 5

32

Windowsには3種類のライブラリがあります。

  • オブジェクトライブラリ(* .lib)
  • ライブラリのインポート(* .lib)
  • ダイナミックライブラリ(* .dll)

オブジェクトライブラリは静的にリンクされています。これらには、ライブラリによって抽象化されたコードの完全なオブジェクト定義が含まれています。

ライブラリのインポートは、オブジェクトライブラリの特殊な形式です。コードを含める代わりに、実行可能ファイルをダイナミックリンクライブラリに最終的にマップするリンカーの情報が含まれています。

オブジェクトライブラリのようなダイナミックリンクライブラリは、プログラムのコードを提供します。ただし、このコードは実行時にロードされ、exeにコンパイルされません。

インポートライブラリを常にリンクする必要はありません。代わりに、LoadLibrary()を呼び出して、名前または序数でAPIエントリポイントを検索できます。(常に、どのDLLを、そのDLLのAPIのどこに入力するかをコードに指示する必要があります。)

ここでの他のコメントは、ライブラリのコードを再コンパイルせずにDLLを静的ライブラリにすることはできないという点で正しいです。これは別の種類の出力です。

于 2012-06-15T14:19:21.557 に答える
24

静的にリンクされていません。.libは、Windowsの.dllにバインドする単なるスタブライブラリです。つまり、コンパイル時に.libにリンクすると、実行時に.dllが検索されます。

于 2012-06-15T13:25:11.260 に答える
2

.libがVisualStudioによって作成された場合は、プロジェクトプロパティ->リンカー->入力->モジュール定義ファイルの値を確認します。空でない場合は、プロジェクトのプロパティ->一般->構成タイプが「静的ライブラリ(.lib)」であっても、link.exeは静的ライブラリの代わりにスタブライブラリを作成します。

于 2014-05-08T16:08:07.313 に答える
0

ダイナミックライブラリに確実にリンクしています。リンカが.libファイルを必要とするからといって、静的ライブラリにリンクしているわけではありません。

于 2012-06-15T13:26:22.680 に答える
0

これが静的libファイルである場合にのみ、libファイルを静的にリンクできます。したがって、最初にdllのプロジェクトを静的libに変換し、ビルドしてから、ビルドの製品である静的.libファイルを使用する必要があります。

于 2012-06-15T13:29:03.367 に答える