web-dev-qa-db-ja.com

Visual C ++でインポートライブラリ(.lib)とDLL)をビルドするにはどうすればよいですか?

DLLファイルとインポートライブラリ(.lib)ファイルをビルドする単一のVisual Studioプロジェクトが必要です(インポートライブラリは、その=の読み込みを処理する静的にリンクされたライブラリですDLLそれを使用する他のプロジェクトのファイル)。

そこで、Visual Studio C++ 2008 Express Editionに行き、クラスライブラリのタイプの新しいプロジェクトを作成し、「構成タイプ」を「ダイナミックライブラリ(.dll)」に設定しました。

しかし、ソリューションをビルドすると、表示される関連する出力ファイルはDLLファイル; LIBファイルが生成されないのがわかります。プロジェクトディレクトリとすべてのサブディレクトリ(リリースおよびデバッグ)。

LIBとDLLファイルを同時に構築することは可能だと思います。なぜなら、MSDNでは DLL is built。 " また、 このWebサイトの別のユーザーがLIBを作成しており、DLL Visual C++ を使用した時間。

どうすればそれができますか?

65
David Grayson

「クラスライブラリ」を選択すると、誤ってC++のCLI(管理)拡張を使用して.Netライブラリを作成するように指示していました。

代わりに、Win32プロジェクトを作成し、次のページのアプリケーション設定で「DLL」を選択します。

MFC DLLまたはATL DLLこれらのライブラリの選択から、そのルートに行きたい場合は作成できますが、そうではないようです。

22
Joe

DLLプロジェクトには実際のエクスポートがありますか?エクスポートがない場合、リンカーはインポートライブラリの.libファイルを生成しません。

VSの非Expressバージョンでは、インポートライブラリ名がプロジェクト設定で指定されています:

Configuration Properties/Linker/Advanced/Import Library

Expressでも同じであると仮定します(名前を構成する機能さえ提供する場合)。

76
Michael Burr

OK、それで http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/からの答えを見つけました は、この問題はシンボルをエクスポートしないために発生したことを示し、さらにlibファイルを作成するためにシンボルをエクスポートする方法を指示します。そのためには、DLLの.hファイルに次のコードを追加します。

#ifdef BARNABY_EXPORTS
#define BARNABY_API __declspec(dllexport)
#else
#define BARNABY_API __declspec(dllimport)
#endif

BARNABY_EXPORTSとBARNABY_APIは、プロジェクトの一意の定義です。次に、エクスポートする各関数の前に単に次のものを置きます。

BARNABY_API int add(){
}

この問題は、新しいプロジェクトの[シンボルのエクスポート]ボックスをクリックすることで回避できた可能性がありますDLL Wizardまたはコンピュータープログラマーのロボトミーにyesと投票することにより。

29
Thom

また、プロジェクト設定でdef名を指定する必要があります。

設定>プロパティ/入力/詳細設定/モジュール>定義ファイル

8
Chris Long Gue