私は静的にコンパイルされた一連のライブラリを持っており、ライブラリ間にかなり深い依存関係があります。たとえば、実行可能ファイル X はライブラリ A と B を使用し、A はライブラリ C を使用し、B はライブラリ C と D を使用します。
X -> A
A -> C
X -> B
B -> C
B -> D
X を A および B にリンクするときに、C および D もライブラリのリストに追加されていない場合にエラーが発生するのは望ましくありません。A および B がこれらのライブラリを内部で使用するという事実は、X が必要としない実装の詳細です。について知ること。また、依存関係ツリーのどこかに新しい依存関係が追加されると、A または B を使用するプログラムのプロジェクト ファイルを再構成する必要があります。深い依存関係ツリーの場合、必要なライブラリのリストが非常に長くなり、保守が困難になる可能性があります。
そのため、A プロジェクトのライブラリアン セクションの「追加の依存関係」設定を使用して、C.lib を追加しています。B のプロジェクトの同じセクションに、C.lib と D.lib を追加します。これにより、ライブラリアンは C.lib を A.lib にバンドルし、C.lib と D.lib を B.lib にバンドルします。
しかし、X をリンクすると、A.lib と B.lib の両方に C.lib の独自のコピーが含まれます。これは、次の行に沿って大量の警告につながります
A.lib(c.obj) : 警告 LNK4006 "symbol" (_symbol) は既に B.lib(c.obj) で定義されています。2 番目の定義は無視されました。
警告を受けずにこれを達成するにはどうすればよいですか? 単純に警告を無効にする方法はありますか、それとももっと良い方法がありますか?
編集:より良い代替手段がないため、単に警告を無効にすることを示唆する複数の回答を見てきました。まあ、これは問題の一部です:私はそれを無効にする方法さえ知りません!