2009-02-24 16 views
55

私は、DLLファイルとインポートライブラリ(.lib)ファイルをビルドするVisual Studioプロジェクトを1つ作成したいと考えています。 (インポートライブラリは、DLLファイルを使用する他のプロジェクトでDLLファイルをロードするための静的リンクライブラリです)。どのようにインポートライブラリ(.lib)とDLLをVisual C++でビルドするのですか?

私はVisual Studio C++ 2008 Express Editionに行き、クラスライブラリのタイプの新しいプロジェクトを作成し、 "構成タイプ"を "Dyanamic Library(.dll)"に設定しました。

しかし、私が解決策を構築するとき、私が見る関連する出力ファイルはDLLファイルだけです。 LIBファイルが生成されることはありません。プロジェクトディレクトリとすべてのサブディレクトリ(リリースとデバッグ)を調べました。

on the MSDN it says "The linker creates the import library when the DLL is built."また、another user of this website is creating LIB and DLL files at the same time using Visual C++のように、LIBとDLLファイルを同時にビルドすることは可能です。

どうすればいいですか?

+1

私の.libファイルが生成されていなかったこの問題はまさに問題でした。可能性のある原因について知ることができ、下のすべての答えを慎重に調べると、私の.cppファイルに.hファイルが含まれていなかったことがわかりました。私の愚かな間違いが遠くの未来に繰り返されるならば、私のコメントが(小さな確率で)誰かを助けることができるように、ちょうどここを投げなさい... – user1884905

答えて

19

「クラスライブラリ」を選択すると、誤ってC++のCLI(管理対象)エクステンションを使用して.Netライブラリを作成するように指示されていました。

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

これらのライブラリの選択肢からMFC DLLまたはATL DLLを作成することもできますが、そうしないと同じように聞こえます。

68

あなたのDLLプロジェクトは実際に輸出していますか?エクスポートがない場合、リンカーはインポートライブラリ.libファイルを生成しません。 VS、輸入libray名の非Expressバージョンで

ここでは、プロジェクトの設定でspecfiedさ:

Configuration Properties/Linker/Advanced/Import Library 

私はそれも名前を設定する機能を提供する場合、それは(エクスプレスに同じだと仮定)。

+6

マイケルありがとう、私の場合、輸出がなかったので、libは生成されなかった。 – Uday

+4

これはどういう意味ですか?私はdllプロジェクトでインポートライブラリを指定しましたが、それでもdllは作成されませんでした。私は私のDLLを使用しているプロジェクトにそれを置くと、それもビルドされませんでした。私はVisual C++ 2010 Expressを使用しています – Thom

+1

これについて少し明確にできますか?インポートライブラリのみを指定しても、.libファイルは生成されません。 –

8

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

設定]> [プロパティ] /入力/アドバンスト/モジュール>

+4

VS2010の 'Configuration Properties' /' Linker'/'Input' /' Module Definition File'にあります – Pakman

+0

どのように定義ファイルを作成しますか?それには何が入っていますか? –

+0

ありがとう...これは私を壁の上に追いやっていた。 –

23

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ウィザードのエクスポートシンボルボックスをクリックするか、コンピュータプログラマのためのlobotomiesにYES投票のいずれかによって阻止されている可能性があります。

+0

他の回答の正確なコピーではないようにこれを編集できますか?この質問にそれを適用させることは良い出発点です。ありがとう。 – Will

+0

固定、ウィル私は間違いなくこのページにその回答を掲載しました。私は今私の混乱をきれいにした。私を監視してくれてありがとう。 – Thom

+4

+1 "コンピュータプログラマーのためのロボトミー"。 –

関連する問題