Visual C++ で依存関係のあるライブラリをリンクすると LNK4006 が表示されなくなる 質問する

Visual C++ で依存関係のあるライブラリをリンクすると LNK4006 が表示されなくなる 質問する

静的にコンパイルされたライブラリのセットがあり、ライブラリ間の依存関係はかなり深いです。たとえば、実行可能ファイル 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 プロジェクトの Librarian セクションの「追加の依存関係」設定を使用して、C.lib を追加します。そして、B プロジェクトの同じセクションに、C.lib と D.lib を追加します。この結果、Librarian は 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 番目の定義は無視されます。

警告を受け取らずにこれを達成するにはどうすればよいですか? 警告を無効にする方法はありますか、それとももっと良い方法がありますか?

編集: より良い代替案がないため、警告を無効にすることを提案する回答を複数見ました。まあ、これが問題の一部です。無効にする方法すらわかりません!

ベストアンサー1

私の知る限り、リンカーの警告を無効にすることはできません。ただし、リンカーのコマンドラインパラメータ(例:/ignore:4006)を使用して、警告の一部を無視することはできます。

プロジェクト プロパティのリンカー > コマンド ライン設定に配置します (正確な場所は覚えていません)。

こちらも読んでみてください:

リンク/無視

MSDN フォーラム - LNK 警告を非表示にする

ワチェク

おすすめ記事