7

したがって、3つのプロジェクト(2つのDLLと1つの.exe)を含むc++ソリューションがあります。

基本的な依存関係の表現は次のとおりです。

アプリケーション->DLL2

アプリケーション->DLL1

DLL2-> DLL1

私が抱えている問題は、DLL2(ビルド時)が.dllを生成するが、.libと.expを生成しないことです。アプリケーションプロジェクトでDLL2を適切に参照する必要があります。ただし、DLL1はこれらのファイルを生成し、DLL1の設定をDLL2の設定と比較しましたが、違いが何であるかがわかりません。

4

3 に答える 3

11

その簡単な説明は、何かをエクスポートするのを忘れたということです。エクスポートがない場合、リンカは.lib/.expファイルを作成しません。dumpbin.exe /exportsこれは、DLLで実行することで確認できます。何も見えないことを期待して。

__declspec(dllexport)DLLからシンボルをエクスポートするために使用します。または.defファイル。

于 2012-11-01T13:59:04.520 に答える
6

問題は、DLL2には.hファイルしかなく、関連する.cppファイルにはコンテンツが含まれていないことでした。そのため、IDEは.libファイルを作成する必要性を認識していませんでした。

于 2012-11-01T14:22:16.643 に答える
1

同じことを起こさせる別の方法を発見しました。別のDLLのサービスルーチンとして開発およびテストしたいくつかのルーチンを、独自のDLLに移動しました。この移動は、コードの最初の行を記述する前に計画されていたため、エクスポート用にマークされておらず、したがって、そのプロジェクトのデフォルトの呼び出し規約である__cdeclを使用していました。ライブラリをビルドしたとき、ビルド環境で.LIBファイルが作成されませんでした。調査の結果、このトピックでの__declspec(dllimport)の言及に触発されて、新しいプロジェクトウィザードによって生成されたテンプレートヘッダーファイルに宣言を移動したにもかかわらず、生成された呼び出し規約の名前を挿入するのを忘れていることに気付きました。プロトタイプにマクロ。

ヘッダーと実装を保持するCPPファイルの両方で呼び出し規約を指定すると、期待どおりの.LIBファイルが得られました。

于 2015-03-14T21:23:53.623 に答える