2009-02-20 24 views
10

解決策にDLLプロジェクトを追加し、実行可能プロジェクトで明示的に参照しました。 実行ファイルがlibを見つけることができないと訴えています。.libファイルが作成されていません(VS2008)

プロジェクトを設定して必要なlibファイルを作成する方法はありますか? そして、なぜプロジェクトが作成しないのだろうか?

乾杯

NOTE 私はプロジェクトを検索しましたし、ファイルを任意の場所に作成されていません。

答えて

12

DLLプロジェクトのリンカ - >詳細プロパティタブで、インポートライブラリ(探している.libファイル)の値が正しい/妥当であることを確認します。このプロパティの値によって、インポートライブラリの名前と、リンカーが書き込む場所が決まります。

また、プロジェクトでインポート定義ファイル(.def)を生成するか、ヘッダーファイルを確認し、エクスポートされた関数にヘッダーファイルの__declspec(dllexport)修飾子が付いていることを確認する必要があります。基本的にあなたはコンパイラがライブラリーを構築したときのdllexportを参照してください、しかし、あなたのクライアントコードは、ヘッダファイルを#includingされたときにDLLIMPORTたい

#ifdef MYAPI_EXPORTS 
#define MYAPI_API __declspec(dllexport) 
#else 
#define MYAPI_API __declspec(dllimport) 
#endif 

void MYAPI_API foo(int bar); 

:これは通常のようなの#defineによってトグルされます。 Visual Studioで基本的なプロジェクト構造が生成された場合は、おそらく既に適切な#defineが作成されているはずです。

.defファイルを作成してdllexportを追加する必要はありません。私は後者を好む。また、.defファイルを使用する場合は、ライブラリプロジェクトのリンカプロパティで指定する必要があります。

+0

この値は、$(TargetDir)$(TargetName).lib に設定されています。これは、動作するプロジェクトにある他のDLLと同じ値です。 –

+0

これは本当に変ですが、手動で(コマンドラインのプロパティシートで)コマンドラインスイッチを追加してインポートライブラリを指定できますか? /IMPLIB:C:\MyDll.libなど? – Jeremy

+0

私はそのスイッチをリンカコマンドラインとコンパイラのコマンドラインの両方に追加しましたが、指定されたファイルは作成されていませんでした...それは単にlib! –

1

Exe ProjectのProject Properties-> Linker-> Inputシートにlibファイルを含めましたか?

また、[追加の参照情報]が[リンカー]タブに含まれていることを確認してください。

+0

私は: でしたが、作成されていないので、これはミュートポイントですか? –

+0

コンパイラがlibファイルをビルド中にエラーを投げているかどうか? libの$(OutDir)\ $(ProjectName)の場所を確認してください – Vinay

+0

エラーがスローされず、libファイルが存在しないという不満があります。 –

1

DLLをビルドするプロジェクトを確認します。 .libを生成していない場合は、おそらくそれを伝えていないでしょう。プロジェクトの出力をプロパティ - >一般 - >構成タイプ(静的ライブラリ.libを選択)でDLLからスタティックライブラリに変更できます。静的ライブラリ.libを選択してください。

+0

あなたはプロジェクトタイプを変更できると思っています。 私の理解は、DLL(動的にリンクされていない)がlibsを作成しなければならないことです。それ以外のものは役に立たないのですか? –

+0

その場合、あなたのプロパティはまだ間違っています。 .libファイルがどこにあるのかを確認する必要があります。それでも問題が解決しない場合は、[プロパティ] - > [リンカ] - > [ライブラリのインポート]をチェックして、libファイルを作成する場所を確認します。 –

+0

$(TargetDir)$(TargetName).libに設定されています 解決策でうまく動作する他のDLLと同じ設定です。 –

4

これまで見たことがあります。そして、実際にちょうどもう一度ヒットしました。何もエクスポートされない場合、.libファイルは作成されません。関数のエクスポートには2つの方法があります。

1)__declspec(dllexport)で関数にマークを付けます。

OR

2)がエクスポートするすべてのこれらの機能を示しています.defファイルを使用してください。

対処:通常__declspecへのいくつかの#defineを設定するプリプロセッサブロックをアクティブに設定するコンパイル時フラグを必要

1)()。誰かがその投稿にそれを挙げました。

2)[プロパティ] - [リンカ - >入力 - >モジュール定義ファイル]の設定が必要です。

関連する問題