18

私は3つのプロジェクトからなるソリューションを持っています。1つは静的ライブラリで、2つはこのライブラリに依存してリンクするコンソールベースの.exeファイルです。それらの設定は同じようです。私はそれらの1つを構築します:

1> ------ビルド開始:プロジェクト:masksample、構成:Debug Win32------
1>コンパイル...
1>stdafx.cpp1
>コンパイル...
1>masksample.cpp1
>コンパイルリソースへのマニフェスト...
1>リンク...
1>リンク:C:\ Users \ DarekSz \ Praca \ cci \ Debug \ masksample.exeが見つからないか、最後のインクリメンタルリンクによってビルドされていません。フルリンクの実行
1>埋め込みマニフェスト...
1>masksample-0エラー、0警告
==========ビルド:1成功、0失敗、1最新、 0スキップ==========

次に、もう一方の構築に進みます。

1> ------ビルド開始:プロジェクト:calibsample、構成:Debug Win32------
1>コンパイル...
1>stdafx.cpp1
>コンパイル...
1>calibsample.cpp1
>コンパイルリソースへのマニフェスト...
1>リンク...
1>リンク:C:\ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.exeが見つからないか、最後のインクリメンタルリンクによってビルドされていません。フルリンクの実行
1>ライブラリC:\ Users \ DarekSz \ Praca \ cci \ Debug \ calibsample.libとオブジェクトC:\ Users \ DarekSz \ Praca \ cci \ Debug\calibsample.expの作成
1>埋め込みマニフェスト...
1> calibsample-0エラー、0警告
==========ビルド:1成功、0失敗、1最新、0スキップ==========

今回、リンカが.libファイルと.expファイルを作成するのはなぜですか?知らないうちにアクティブにした、これをオンまたはオフにするオプションはありますか?

4

2 に答える 2

21

少し遅れていますが、他の誰かがこのヒントを役立つかもしれません。

ところで、私はC++の第一人者ではありません...

私のソリューションでは、3つのプロジェクトがあります。1つはdllプロジェクトで、他はdllプロジェクトを参照する2つのWin32アプリプロジェクトです。

通常、dllがビルドされると、NON dllプロジェクト用に生成された他のファイル(.exp、.lib)もいくつかあります。これは、dllプロジェクトの.hファイルをアプリプロジェクトにインクルードするときに発生する可能性があります。このプロジェクトには、__ declspec(dllexport)でマークされたクラスが含まれています。

リンカを回避するには、「エクスポート」するためにいくつかの.hファイルを含めようとしていると考え、条件式を使用して_declspecマクロを定義します。

例:

#if defined(_DO_NOT_EXPORT)
#define DllExport  
#else
#define DllExport __declspec(dllexport)
#endif

OK、dllプロジェクトにMyClass.hがあるとしましょう。

.hファイルに今持っている可能性があります:

class DllExport MyClass {
 ...
}

この.hファイルをNONdllプロジェクトに含める場合は、_DO_NOT_EXPORT条件を定義するだけです。

#define _DO_NOT_EXPORT
#include "MyClass.h"
于 2010-10-24T11:50:59.777 に答える
5

1つ以上の関数が実行可能ファイルからエクスポートされる場合、これは正常です。

于 2010-05-12T16:18:13.603 に答える