2013-03-09 24 views
7

C++ゲームエンジンプロジェクトを開始しようとしています。.libファイルが存在しないため、ライブラリプロジェクト(DLL)を参照できません。

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

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

エラーLNK1104:ファイルを開くことができません 'MYPATH \ Renderer.lib' MYPATHの\のLINK エンジン

なぜそれが言及されたLIBSを?

+0

可能複製(http://stackoverflow.com/questions/9360280/how-to-make-a-lib [.dllファイルとヘッダファイルを持っているときの.libファイルを作成する方法] -file-when-a-dll-file-and-a-header-file) – jww

答えて

2

一般的に、

ライブラリには、それは2つのモードでのAPIですあなたを与えることがあります。

  • ダイナミック:小規模な実行可能ファイルが、そのDLLを必要とします。

  • スタティック:実行可能なファイルは大容量ですが、スタンドアロンです。

まず、どのように静的または動的にそのライブラリを使用したいのですか?コンパイラがそのライブラリのヘッダファイルを見つけることができるようにプロジェクトを設定します。 それからプロジェクトにLIBファイルを追加する必要がある場合。

あなたの場合:プロジェクトやメイクファイルにLIBファイルを正しく追加したかどうかを確認しますか?

demo.exeプロジェクトに細かい参照
+0

私はそれを動的に行うことができてうれしく思います。もしゲームを出荷したら、対応するdllの意味は、更新し、必要に応じて修正する。その場合、私のレンダラーdllプロジェクトはlibファイルを作成せず、dll、ilk、およびpdbファイルのみを作成します。私はちょうど、リンクライブラリの依存関係のオプションがtrueに設定されている(エンジンのプロパティのフレームワークと参照タブの下にある)レンダラーのプロジェクト参照プロパティを調べたときに気づいたことがあります。それはあまり意味がありますか? – EvilWeebl

2

エンジンプロジェクト(参照を追加し、追加のパスを追加することにより、ディレクトリを含める)

いくつかのライブラリが必要なことを意味し、静的にリンクすることができますヘッダーファイル(.h/.hpp)と.libファイルのみです。他のライブラリでは、プログラムがいくつかのDLLファイルに依存する結果になるダイナミックリンケージが必要になることがありますが、通常、それらのDLLに何が含まれているかを知るためにヘッダーファイルが必要になります。場合によっては、あなたのケースであるように見えるかもしれません。ヘッダーファイル、静的ライブラリ、およびDLLのすべてが必要です。宣言を含む

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

9

多くのDLLには、対応するLIBライブラリが付属しています。ライブラリはリンク時にのみ必要です。そこで、基本的LIBのライブラリの2種類があります。リンカのための唯一の定義ですべてのオブジェクトファイルに

  • ライブラリが含まれてい

    1. 実静的ライブラリは、ライブラリのこの種は、DLLが付属しています

    基本的には、このLIBファイルをDLLと連携させる必要があります。

  • +1

    どこにでも作成されている.libファイルは見つかりません。たとえば、私が自分のエンジンdllプロジェクトに含めるレンダラーdllプロジェクトを取るとしたら、レンダラーはうまく構築し、* .dll、* .ilk、* .pdbをmy(solution)/ Debugフォルダに出力します。また、* .objのような私の(解決)/レンダラー/デバッグフォルダーにファイルがあります。どこにリンクする必要がありますか?また、最終的にインストールプロジェクトを作成するには、私はちょうどdllやリンカが必要ですか? – EvilWeebl

    +0

    私の場合、* .objファイルを含むフォルダには* .libも含まれていますが、他のプロジェクトはそこに見つかりません。 –

    3

    そこで問題を分類しました。彼らは新しいプロジェクトであったため、まだ実装されていないメソッドがあったので、libは作成されていませんでした。

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

    #ifdef AWESOME_ENGINE_EXPORTS // Or AWESOMEENGINE_EXPORTS? 
    #define DLL __declspec(dllexport) 
    #else 
    #define DLL __declspec(dllimport) 
    #endif 
    
    +0

    プロジェクト、プロパティ、構成プロパティ、C/C++、プリプロセッサ。あなたのDLLのプリプロセッサ定義のリストに 'AWESOME_ENGINE_EXPORTS'(またはあなたが任意に選択したもの)を追加してください。これは、あなたのDLLに定義されたマクロを作成し、関数をエクスポートします。他の誰もそのマクロを持っていないので、関数はインポートされます。 –

    関連する問題