0

私は Visual Studio 2003 を使用しています。他の 3 つのモジュールを必要とする非常に一般的なモジュールに関数があります。新しい関数を使用するプロジェクトにのみ、他の 3 つのモジュールを含める必要があり、関数を参照しないプロジェクトは、「未解決の外部シンボル」エラーなしでリンクする必要があります。関数レベルのリンク、OPT:REF、および考えられるすべてのプロジェクト設定を試しましたが、リンカーは常に文句を言います。テスト用に簡単な例を作成しました。どんなアイデアも素晴らしいでしょう...

//main.cpp
//#include "a.h"
int _tmain(int argc, _TCHAR* argv[])
{
  //a();
  return 0;
}

//a.h
#include "b.h"
void a();

//a.cpp
#include "a.h"
#include "b.h"
void a()
{
  b();
}

//b.h
void b();

//b.cpp
#include "b.h"
void b()
{
}

a() が呼び出されない限り、プロジェクトで main.cpp と a.cpp のみを使用して正常にコンパイルする必要があります。a() が _tmain() で呼び出された場合、もちろん b.cpp をプロジェクトに追加する必要があります。

ANYWHERE で参照されている EVERY 関数がプロジェクト内にあることを確認するまで、リンカーは OPT:REF を適用しないようです。それ (b()) が参照されていない関数 (a()) で参照されている場合でも。

4

3 に答える 3

1

オプションの関数と 3 つの依存関係のライブラリを作成することを検討しましたか?

于 2009-08-19T22:06:35.570 に答える
0

率直に言って、疑わしい a() 呼び出しを、 d と並ん#ifdefで何かを探すan で囲むことは有望に思えます。#defineb()

于 2009-08-19T21:56:38.787 に答える
0

他の3つのモジュールを必要とする非常に一般的なモジュールに機能があります。新しい関数を使用するプロジェクトにのみ、他の 3 つのモジュールを含める必要があり、関数を参照しないプロジェクトは、「未解決の外部シンボル」エラーなしでリンクする必要があります。

この新しい機能を別のモジュールに分離する必要があるように思えます。(共通モジュールに入れないでください)。そうすれば、それを必要とする人は誰でも含めることができ、そうでない人は含めません。そうしないと、問題を引き起こすだけの条件付きコンパイル マクロに行き詰まります。

于 2009-08-19T22:03:53.360 に答える