Frage

Ich verwende eine Bibliothek von CGAL, die während der Verknüpfung Phase meines Codekompilierung viele Verknüpfungs Warnungen 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 schalte ich diese spezifische Linker Warnung unter Visual C ++ ab / Studio 2008?

Beachten Sie, dass ich habe keine Kontrolle über die externe (CGAL) Bibliothek, die ich verwende. Ich kann nicht / donot will in recompiling die externe Bibliothek zu erhalten. Daher die Notwendigkeit, die Nachrichten an meinem Ende zu beheben.

War es hilfreich?

Lösung

Fügen Sie die folgende als zusätzliche Linkeroption:

 /ignore:4099

Dies ist in Eigenschaften-> Linker-> Command Line

Andere Tipps

Aktualisieren 2018.10.16

Wie verlautet, wie von VS 2013 kann diese Warnung deaktiviert werden. Siehe Kommentar von @ Mark Ransom.

Original Antwort

Sie können nicht, dass bestimmte Warnung abzuschalten.

Nach Geoff Chappell die 4099 Warnung wird behandelt, als ob es ist zu wichtig, auch mit / wx durch die Verwendung in Verbindung zu ignorieren

(die Warnungen als Fehler und ignorieren die angegebene Warnung in anderen Situationen behandeln würde)

Hier ist der relevante Text aus dem Link:

  

Nicht ganz unüberhörbar Warnungen

     

Für einige Warnungsnummern, Spezifikation in a / ignorieren Option ist   akzeptiert, aber nicht unbedingt beaufschlagt wird. Sollte die Warnung auftreten   während der / wx Option nicht aktiv ist, dann ist die Warnmeldung noch   angezeigt, aber wenn die / wx Option aktiviert ist, dann ist die Warnung   ignoriert. Es ist, als ob die Warnung wichtig gedacht ist genug   einen Versuch, außer Kraft setzt auf ihn zu ignorieren, aber nicht, wenn der Benutzer zu setzen   hohe Preis auf unignored Warnungen.

     

Die folgenden Warnnummern sind betroffen:

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

(Für die Aufzeichnung und bevor der Faden verschwindet auf den MSDN-Foren) Sie können die Warnung nicht (zumindest unter VS2010) deaktivieren, da es auf der Liste der Warnungen, die nicht deaktiviert werden kann (so / wd4099 funktioniert nicht), aber was kann man stattdessen tun ist Patch link.exe (in der Regel C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe), es zu entfernen aus der Liste. Klingt wie ein Presslufthammer, ich weiß. Es funktioniert aber.

Zum Beispiel, wenn Sie die Warnung für 4099, offen link.exe mit einem Hex-Editor, zur Leitung 15A0 entfernen möchten, die (für 4099 Little-Endian) 03 10 liest und ersetzen Sie es mit FF 00 (die es nicht gibt. )

Für das Wohl des anderen, ich, ich würde allerdings schließen, was ich tue.

Da Sie nicht Visual Studio (2010 in meinem Fall) bekommen kann die LNK4204 Warnungen zu ignorieren, war mein Ansatz, es zu geben, was er wollte: die PDB-Dateien. Wie ich in meinem Fall mit Open-Source-Bibliotheken war, habe ich den Code bereits die PDB-Dateien zu bauen.

Aber, die standardmäßig alle PDF-Dateien zu nennen, die gleiche Sache: vc100.pdb in meinem Fall. Wie Sie eine PDB für jeden einzelnen LIB benötigen, schafft dies ein Problem, vor allem, wenn Sie so etwas wie ImageMagik verwenden, die Dateien etwa 20 statische LIB erstellt. Sie können nicht mehr als 20 lib Dateien in einem Verzeichnis haben (die Ihre Anwendung Linker Referenzen in den Bibliotheken zu verknüpfen aus) und haben alle 20 PDB-Dateien, die gleiche Sache genannt.

Meine Lösung war, auf meine statische Bibliothek Dateien zu gehen und wieder aufzubauen und konfigurieren VS2010 die PDB-Datei in Bezug auf das Projekt zu nennen. Auf diese Weise jede LIB bekommt einen ähnlichen Namen PDB, und Sie können alle der LIBs und PDBs in einem Verzeichnis für Ihr Projekt in Gebrauch genommen.

Also für den "Debug" configuraton, ich bearbeiten:

Einstellungen-> Konfigurationseigenschaften -> C / C ++ -> Ausgabedateien -> Programm-Datenbank-Dateiname von

$ (IntDir) vc $ (PlatformToolsetVersion) PDB

der folgende Wert sein:

$ (OutDir) vc $ (PlatformToolsetVersion) D $ (Projektname) PDB

Nun, anstatt irgendwo im Zwischen Verzeichnis, die PDB-Dateien in das Ausgabeverzeichnis geschrieben werden, wo die LIB-Dateien auch geschrieben werden, und vor allem sind sie mit einem Suffix von D + Projektnamen benannt . Das bedeutet, jede Bibliothek Projekt produduces ein Projekt Lib und eine projektspezifische PDB.

Ich bin jetzt in der Lage, alle meine Release LIB-Dateien, mein Debug-LIB-Dateien und die Debug-PDB-Dateien in einen Platz auf meinem Entwicklungssystem, und das Projekt, das verwendet, dass 3rd-Party-Bibliothek im Debug-Modus zu kopieren, hat die pDB-Dateien, die es im Debug-Modus benötigt.

Ich vermute / ignorieren ist eine VC6 link.exe Option. für VS2005 und VS2008 des Linkers gibt es keine dokumentierten / ignore Option zur Verfügung, aber der Linker sieht einfach ignorieren die "/ ignore: XXX". Option, keine Fehler und keine Wirkung

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

Alternativ können Sie Debug-Informationen Generation von Projekteigenschaften> Linkers> Debuggen> Debuginfo generieren Feld deaktivieren.

EDIT: Benutzen Sie nicht VC80 / Visual Studio 2005, aber Visual Studio 2008 / VC90 Versionen der CGAL Bibliothek (vielleicht von hier ).

Linkers Werkzeug Warn LNK4099 :

  

Sie können auch mit / Z7 kompilieren, so   die PDB braucht nicht verwendet zu werden, oder   Entfernen Sie den / debug Linker Option, wenn Sie   haben keine PDB-Dateien für die Objekte   Sie verknüpfen.

Sie können nicht Linker Warnung 4099, deaktivieren Sie wie gesagt @John Weldon.

Sie sollten Bibliothek mit einigen Projektkonfigurationsänderungen wieder aufzubauen. Sie haben mehrere Möglichkeiten:

  • Speicher PDB-Datei mit Debug-Informationen ist die gleiche Ordner, in dem Sie LIB-Datei zu speichern. Der Wert "$ (OutDir) $ (Targetname) PDB" Eigenschaften-> C / C ++ -> Ausgabedateien-Programmdatenbank Dateiname
  • Speichern Debug-Informationen in LIB-Datei. Sollwert "C7-kompatibel (/ Z7)" auf Eigenschaften-> C / C ++ -> Allgemein-> Debug Information Format
  • Deaktivieren Generation Debug-Informationen für diese Bibliothek. Entfernen Sie Wert von Eigenschaften-> C / C ++ -> Allgemein-> Debug Information Format
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top