同じ名前の機能を持つ 2 つのプロジェクトを含む VS10 ソリューションがあります。リンカーは、(同じ名前の 2 つの関数の) 2 番目の定義が無視されることについて不平を言います (警告をスローします)。
warning LNK4006: "void __cdecl function_name(short *,class Bbox *,int,int,struct FILE_NAMES *,unsigned char *)" (?function_name@@YAXPAFPAVBbox@@HHPAUFILE_NAMES@@PAE@Z) already defined in XXX.lib(segment.obj); second definition ignored
これにより、2 番目のプロジェクト (無視されたプロジェクト) の関数への呼び出しが最初のプロジェクトの関数を指すようになります (定義が無視されるため)。
私の質問は: 2 つのプロジェクトで同じ名前を持つすべての関数の名前を変更する以外に、この問題を回避/解決する方法はありますか? たとえば、ヘッダー ファイルに #if/pragma を追加するか、.obj ファイルを操作します。現実には、どのコンパイルでも 2 つのプロジェクトのうちの 1 つだけが必要なソリューションであるため、条件付きコンパイルの簡単な方法で問題ありませんが、私の最初の好みは、両方のプロジェクトを一緒にコンパイルすることです。