web-dev-qa-db-ja.com

Visual C ++:特定のリンカー警告を無効にする方法は?

私はCGALのライブラリを使用しています。これは、コードコンパイルのリンク段階で、この形式のリンク警告を大量に生成します。

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

Visual C++/Studio 2008でこの特定のリンカー警告をオフにするにはどうすればよいですか?

使用している外部(CGAL)ライブラリを制御していないことに注意してください。外部ライブラリを再コンパイルすることはできません/したくありません。したがって、私の終わりにメッセージを修正する必要があります。

114
Ashwin Nanjappa

追加のリンカーオプションとして次を追加します。

 /ignore:4099

これは、プロパティ->リンカー->コマンドラインにあります

97
Aaron Saarela

2018-10-16を更新

報告によると、VS 2013現在、この警告は無効にできます。 @Mark Ransomのコメントを参照してください。

元の回答

その特定の警告を無効にすることはできません。

Geoff Chappell によれば、4099の警告は、/ wxと組み合わせて使用​​しても無視できないほど重要であると見なされます(警告をエラーとして扱い、他の状況では指定された警告を無視します)

リンクの関連テキストは次のとおりです。

まったく無視できない警告ではない

一部の警告番号では、/ ignoreオプションでの指定は受け入れられますが、必ずしも実行されるわけではありません。/wxオプションがアクティブでないときに警告が発生した場合、警告メッセージは引き続き表示されますが、/ wxオプションがアクティブな場合、警告は無視されます。それは、警告が無視する試みを無効にするのに十分に重要であると考えられているが、無視されない警告にユーザーが高すぎる価格を置いている場合ではありません。

次の警告番号が影響を受けます。

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237
47
John Weldon

(記録のために、スレッドがmsdnフォーラムで消える前に)無効にできない警告のリストにあるため、警告を無効にすることはできません(少なくともVS2010では)(したがって/ wd4099は機能しません)ただし、代わりにできるのは、link.exeのパッチ(通常はC:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\bin\link.exe)で、上記のリストから削除することです。手持ち削岩機のように聞こえます、私は知っています。それでも動作します。

たとえば、4099の警告を削除する場合は、16進エディターでlink.exeを開き、03 10(4099のリトルエンディアン)を読み取る行15A0に移動し、FF 00(存在しない)に置き換えます。

10
Gurg Hackpof

他の人の利益のために、私がやったことを含めたいと思います。

Visual Studio(私の場合は2010)でLNK4204の警告を無視することはできないため、私のアプローチでは、pdbファイルを提供しました。私の場合、オープンソースライブラリを使用していたので、pdbファイルをビルドするコードがすでにあります。

ただし、デフォルトでは、すべてのPDFファイルに同じ名前を付けます。私の場合はvc100.pdbです。すべての.libに.pdbが必要なため、これにより問題が発生します。特に、約20個の静的.libファイルを作成するImageMagikのようなものを使用している場合、1つのディレクトリに20個のlibファイル(ライブラリのリンク元となるアプリケーションのリンカー参照)を含めることはできません。同じこと。

私の解決策は、静的ライブラリファイルを再構築して、VS2010がPROJECTに関して.pdbファイルに名前を付けるように構成することでした。この方法で、各.libに同様の名前の.pdbが付けられ、プロジェクトで使用するすべてのLIBとPDBを1つのディレクトリに配置できます。

「デバッグ」設定のために、私は編集しました:

Properties-> Configuration Properties-> C/C++-> Output Files-> Program Database File Namefrom

$(IntDir)vc $(PlatformToolsetVersion).pdb

次の値になります。

$(OutDir)vc $(PlatformToolsetVersion)D $(ProjectName).pdb

現在、中間ディレクトリのどこかではなく、.pdbファイルが出力ディレクトリに書き込まれます。出力ディレクトリでは、.libファイルも書き込まれます。そして最も重要なことは、D +projectのサフィックスで名前が付けられていることです。名前。これは、各ライブラリprojectがプロジェクト.libおよびプロジェクト固有の.pdbを生成することを意味します。

リリース.libファイル、デバッグ.libファイル、デバッグ.pdbファイルをすべて開発システムの1か所にコピーできます。また、デバッグモードでそのサードパーティライブラリを使用するプロジェクトには、pdbがあります。デバッグモードで必要なファイル。

8
Minok

/ ignoreはVC6 link.exeオプションであると思われます。 VS2005およびVS2008のリンカーには、文書化された/ ignoreオプションはありませんが、リンカーは「/ ignore:XXX」オプションを無視するだけで、エラーも効果もありません。

3
zhaorufei

@John Weldonが言ったように、リンカーの警告4099を無効にすることはできません。

プロジェクトの構成を変更してライブラリを再構築する必要があります。いくつかのオプションがあります:

  • PDBファイルをデバッグ情報とともに保存するのは、.libファイルを保存するのと同じフォルダーです。値「$(OutDir)$(TargetName).pdb」を「プロパティ」->「C/C++」->「出力ファイル」-「プログラムデータベースファイル名」に設定します。
  • デバッグ情報を.libファイルに保存します。 「C7互換(/ Z7)」の値を「プロパティー」->「C/C++」->「一般」->「デバッグ情報フォ​​ーマット」に設定します。
  • このライブラリの生成デバッグ情報を無効にします。プロパティ-> C/C++->一般->デバッグ情報フォ​​ーマットから値を削除
1
KindDragon

PDBファイルは通常、デバッグ情報を保存するために使用されます。この警告は、おそらくファイルvc80.pdbは、ターゲットオブジェクトファイルをリンクするときに見つかりません。 LNK4099のMSDNエントリをお読みください こちら

または、[プロジェクトプロパティ]> [リンカ]> [デバッグ]> [デバッグ情報の生成]フィールドからデバッグ情報の生成をオフにすることもできます。

1
dirkgently

編集:vc80/Visual Studio 2005を使用せず、Visual Studio 2008/vc90バージョンのCGALライブラリ(多分 fromhere )を使用してください。

リンカーツール警告LNK4099

/ Z7でコンパイルすることもできるので、pdbを使用する必要はありません。リンクしているオブジェクトの.pdbファイルがない場合は、/ DEBUGリンカーオプションを削除します。

1
ax.