7

C++ ゲーム エンジン プロジェクトを開始しようとしています。

私はdllとlibについてあまり知識がありませんが、エンジン自体はdllであり、エンジンによって使用されるレンダラー、入力などの個別のdllプロジェクトがあり、エンジンdllはゲーム。

エンジン プロジェクトは demo.exe プロジェクトで正常に参照されているようですが (参照を追加し、追加のインクルード ディレクトリへのパスを追加することにより)、エンジン dll プロジェクトでレンダラー dll プロジェクトへの参照を追加しようとすると、 :

エラー LNK1104: ファイル 'MyPath\Renderer.lib' MyPath\LINK Engine を開けません

ライブラリについて言及しているのはなぜですか?

4

4 に答える 4

10

多くの DLL には、リンク段階でのみ必要な、対応する LIB ライブラリが付属しています。したがって、基本的に 2 種類の LIB ライブラリがあります。

  1. すべてのオブジェクト ファイルを含む実際の静的ライブラリ

  2. リンカーの定義のみを含むライブラリ。この種のライブラリには DLL が付属しています

したがって、基本的に、DLL を操作できるようにするには、この LIB ファイルをリンクする必要があります。

于 2013-03-09T16:52:48.713 に答える
3

だから私は自分の問題を整理しました。それらは新しいプロジェクトだったので、まだメソッドが実装されていなかったため、ライブラリが作成されていなかったため、参照するものは何もありません..愚かな私。

最後に、ヘッダー ファイルの dllimport/dllexport マクロの定義に問題があります。エクスポート プロジェクトのときに dllexport を定義しようとしていますが、プロジェクトが 2 つの名前、たとえば「awesome engine」であるとしたら、どうすれば自動的に作成されるエクスポート マクロを実現できますか? スペースにアンダースコアを使用する必要がありますか?

#ifdef AWESOME_ENGINE_EXPORTS // Or AWESOMEENGINE_EXPORTS?
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
于 2013-03-09T19:52:09.860 に答える
2

一般的、

ライブラリは、次の 2 つのモードで API を提供する場合があります。

  • 動的: 実行可能ファイルは小さくなりますが、その DLL が必要です。

  • 静的: より大きな実行可能ファイルですが、スタンドアロンです。

まず、そのライブラリを静的または動的にどのように使用するかを決定します。次に、コンパイラがそのライブラリのヘッダー ファイルを見つけられるようにプロジェクトを構成します。次に、必要に応じて LIB ファイルをプロジェクトに追加します。

あなたの場合:プロジェクトまたはメイクファイルにLIBファイルを正しく追加したかどうかを確認してください。

于 2013-03-09T16:48:49.887 に答える
2

エンジン プロジェクトは、demo.exe プロジェクトで適切に参照されます (参照を追加し、追加のインクルード ディレクトリへのパスを追加することにより)

一部のライブラリは静的にリンクできます。つまり、ヘッダー ファイル ( .h/ .hpp) と.libファイルのみが必要です。他のライブラリでは、プログラムが一部の DLL ファイルに依存する結果となる動的リンケージが必要になる場合がありますが、通常、これらの DLL の内容を知るためにヘッダー ファイルが必要になります。場合によっては、ヘッダー ファイル、静的ライブラリ、および DLL のすべてが必要になることがあります。

ヘッダー ファイルには宣言が含まれ、クラスの構造が定義され、関数のプロトタイプが宣言されます。静的ライブラリ(.libファイル) はバイナリであり、関数や変数などの定義が含まれており、コンパイル時に解決する必要があります。 、そのため、それらが欠落している場合、リンカは文句を言います。動的にリンクされたライブラリ(DLL) もバイナリですが、実行時に解決されます。つまり、本当に必要になるのはプログラムを実行するときです。

于 2013-03-09T16:51:57.460 に答える