wake-up-neo.com

Visual C ++: Deaktivieren bestimmter Linkerwarnungen

Ich verwende eine Bibliothek von CGAL, die während der Verknüpfungsphase meiner Codekompilierung viele Verknüpfungswarnungen dieser Form erzeugt:

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

Wie deaktiviere ich diese spezielle Linkerwarnung unter Visual C++/Studio 2008?

Beachten Sie, dass ich keine Kontrolle über die von mir verwendete externe Bibliothek (CGAL) habe. Ich kann/möchte nicht mit dem Neukompilieren der externen Bibliothek beginnen. Daher die Notwendigkeit, die Nachrichten an meinem Ende zu beheben.

114
Ashwin Nanjappa

Fügen Sie als zusätzliche Linker-Option Folgendes hinzu:

 /ignore:4099

Dies ist in Eigenschaften-> Linker-> Befehlszeile

97
Aaron Saarela

Update 16.10.2018

Berichten zufolge kann diese Warnung ab VS 2013 deaktiviert werden. Siehe den Kommentar von Mark Ransom.

Ursprüngliche Antwort

Sie können diese spezielle Warnung nicht deaktivieren.

Laut Geoff Chappell wird die Warnung 4099 so behandelt, als wäre es zu wichtig, sie zu ignorieren, auch wenn sie zusammen mit/wx verwendet wird (dies würde Warnungen als Fehler behandeln und die angegebene Warnung in anderen Situationen ignorieren).

Hier ist der relevante Text aus dem Link:

Nicht ganz unwahrscheinliche Warnungen

Für einige Warnungsnummern wird die Angabe in einer/ignore-Option akzeptiert, jedoch nicht unbedingt ausgeführt. Wenn die Warnung auftritt, während die Option/wx nicht aktiv ist, wird die Warnmeldung weiterhin angezeigt. Wenn die Option/wx jedoch aktiv ist, wird die Warnung ignoriert. Es ist, als ob die Warnung für wichtig genug gehalten wird, um einen Versuch, sie zu ignorieren, außer Kraft zu setzen, aber nicht, wenn der Benutzer einen zu hohen Preis für nicht unterschriebene Warnungen festgelegt hat.

Die folgenden Warnungsnummern sind betroffen:

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

(Für den Datensatz und bevor der Thread in den msdn-Foren verschwindet) Sie können die Warnung nicht deaktivieren (zumindest nicht unter VS2010), da sie in der Liste der Warnungen aufgeführt ist, die nicht deaktiviert werden können (daher funktioniert/wd4099 nicht). Sie können jedoch stattdessen Patch link.exe (normalerweise C:\Programme (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe) aus der Liste entfernen. Klingt wie ein Presslufthammer, ich weiß. Es funktioniert aber.

Wenn Sie zum Beispiel die Warnung für 4099 entfernen möchten, öffnen Sie link.exe mit einem Hex-Editor, gehen Sie zu Zeile 15A0, die 03 10 lautet (Little Endian für 4099), und ersetzen Sie sie durch FF 00 (das nicht existiert).

10
Gurg Hackpof

Zum Wohle anderer, dachte ich, würde ich mit einbeziehen, was ich getan habe.

Da Visual Studio (2010 in meinem Fall) die LNK4204-Warnungen nicht ignorieren kann, bestand mein Ansatz darin, das zu geben, was es wollte: die pdb-Dateien. Da ich in meinem Fall Open Source-Bibliotheken verwendet habe, habe ich den Code, der die pdb-Dateien erstellt, bereits.

ABER die Standardeinstellung ist, dass alle PDF) -Dateien dasselbe benannt werden: vc100.pdb in meinem Fall. Da Sie für jede einzelne .lib eine .pdb benötigen, entsteht ein Problem. Besonders wenn Sie etwas wie ImageMagik verwenden, das ungefähr 20 statische .lib-Dateien erstellt. Sie können nicht 20 lib-Dateien in einem Verzeichnis haben (von dem der Linker Ihrer Anwendung auf den Link in den Bibliotheken verweist) und alle 20 .pdb-Dateien die Bezeichnung haben gleiche Sache.

Meine Lösung bestand darin, meine statischen Bibliotheksdateien neu zu erstellen und VS2010 so zu konfigurieren, dass die PDB-Datei in Bezug auf das PROJEKT benannt wird. Auf diese Weise erhält jede LIB eine ähnlich benannte PDB, und Sie können alle LIBs und PDBs in einem Verzeichnis ablegen, damit Ihr Projekt sie verwendet.

Also habe ich für die "Debug" -Konfiguration folgendes bearbeitet:

Eigenschaften-> Konfigurationseigenschaften -> C/C++ -> Ausgabedateien -> Name der Programmdatenbankdatei von

$ (IntDir) vc $ (PlatformToolsetVersion) .pdb

der folgende Wert sein:

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

Anstatt irgendwo im Zwischenverzeichnis werden die PDB-Dateien in das Ausgabeverzeichnis geschrieben, in das auch die LIB-Dateien geschrieben werden, und vor allem werden sie mit dem Suffix D + project benannt Name. Dies bedeutet, dass jedes Bibliotheksprojekt eine Projekt-LIB und eine projektspezifische PDB erstellt.

Ich kann jetzt alle meine Release-LIB-Dateien, meine Debug-LIB-Dateien und die Debug-PDB-Dateien an einer Stelle auf meinem Entwicklungssystem kopieren, und das Projekt, das diese Drittanbieter-Bibliothek im Debug-Modus verwendet, verfügt über die PDB Dateien, die im Debug-Modus benötigt werden.

8
Minok

Ich vermute/ignoriere eine VC6 link.exe Option. Für den VS2005- und VS2008-Linker ist keine Option zum Dokumentieren/Ignorieren verfügbar. Der Linker ignoriert jedoch die Option "/ ignore: XXX" (/ ignorieren: XXX), ohne Fehler und ohne Auswirkungen.

3
zhaorufei

Sie können die Linkerwarnung 4099 nicht deaktivieren, wie @John Weldon sagte.

Sie sollten die Bibliothek mit einigen Projektkonfigurationsänderungen neu erstellen. Sie haben mehrere Möglichkeiten:

  • PDB-Datei mit Debug-Informationen speichern ist derselbe Ordner, in dem Sie die .lib-Datei speichern. Setzen Sie den Wert "$ (OutDir) $ (TargetName) .pdb" auf Properties-> C/C++ -> Output Files-Program Database File Name
  • Speichern Sie die Debug-Informationen in der LIB-Datei. Setzen Sie den Wert "C7 compatible (/ Z7)" auf Properties-> C/C++ -> General-> Debug Information Format
  • Deaktivieren Sie die Generierungs-Debug-Informationen für diese Bibliothek. Entfernen Sie den Wert aus Properties-> C/C++ -> General-> Debug Information Format
1
KindDragon

Die PDB-Datei wird normalerweise zum Speichern von Debug-Informationen verwendet. Diese Warnung wird wahrscheinlich verursacht, weil die Datei vc80.pdb wird beim Verknüpfen der Zielobjektdatei nicht gefunden. Lesen Sie den MSDN-Eintrag auf LNK4099 hier .

Alternativ können Sie die Generierung von Debug-Informationen über das Feld Projekteigenschaften> Linker> Debugging> Debug-Informationen generieren deaktivieren.

1
dirkgently

BEARBEITEN: Verwenden Sie nicht vc80/Visual Studio 2005, sondern Visual Studio 2008/vc90-Versionen der CGAL-Bibliothek (möglicherweise vonhier ).

Linker Tools Warnung LNK4099 :

Sie können auch mit/Z7 kompilieren, sodass die PDB nicht verwendet werden muss, oder die Linkeroption/DEBUG entfernen, wenn Sie keine PDB-Dateien für die Objekte haben, die Sie verknüpfen.

1
ax.