2009-08-19 9 views
0

私はVisual Studio 2003です。私は3つの他のモジュールを必要とする非常に共通のモジュールで機能しています。私は、新しい機能を使用しているプロジェクトだけで、3つの他のモジュールを含める必要があり、 "未解決の外部シンボル"エラーなしにリンクする関数を参照しないようにしたい。私は機能レベルのリンク、OPT:REF、考えられるすべてのプロジェクト設定を試みましたが、リンカーは常に不平を言います。私はテストのための簡単な例を作った。すべてのアイデアは素晴らしいだろう...私は限り(としてのプロジェクトでのみmain.cppにしてa.cppと罰金コンパイルするプロジェクトに必要参照されていない関数のための "未解決の外部シンボル"

//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() 
{ 
} 

)が呼び出されることはありません。 _tmain()でa()が呼び出された場合はもちろん、プロジェクトにb.cppを追加する必要があります。

リンカは、OPT:REFを適用していないようです。たとえit(b())が参照されていない関数(a())で参照されていても。

答えて

0

私は非常に共通のモジュールに3つのモジュールを必要とする機能を持っています。私は、新しい機能を使用しているプロジェクトだけで、3つの他のモジュールを含める必要があり、 "未解決の外部シンボル"エラーなしにリンクする関数を参照しないようにしたい。

この新しい機能を別のモジュールに分けてください。 (共通モジュールに入れないでください)。そうすれば、それを必要とする人は誰でもそれを含めることができます。そうしないと、何らかの種類の条件付きコンパイルマクロで問題が発生するだけです。

+0

string_utilitiesモジュールにencrypt/decrypt関数を追加しました。私はすべてを行うモノリシックモジュールは理想的ではないと思います。 – Cowtung

+0

また、私は理想的ではない条件付きコンパイルマクロについて同意します。 – Cowtung

0

オフハンドで、dと並んでと思われるものを探す#ifdefと疑わしいa()コールを囲んでいます。

+0

私はそれについて考えましたが、私は事前定義リストを最小限に保つのが好きです。私はいくつかのVS設定やC++の機能が欠けていると思っていました。 – Cowtung

1

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

+0

これは最終的に私たちが後でやることです。私が話している一般的なモジュールはstring_utilities.hと呼ばれ、その場所全体で使用されます。私は、大量のプロジェクトを変更する必要のない簡単な修正があることを期待していたと思います。私がlibsを好きではないことは、異なるプロジェクト設定や迷惑で他のトラブルに遭うことがあるということです。 string_utilities.h/cppはちょうどどこでも簡単にすばらしいものになっていたはずです。 – Cowtung

関連する問題