2016-06-22 2 views
4

Ich habe ein Visual Studio C++ Projekt beschäftigen, wo ich die Einstellungen Linker verwendenWie mit 3rd-Party-C++ Bibliotheken LNK4099 Warnung in Visual Studio

/WX (TreatWarningsAsLinkerErrors=true) 

In Debug ich mit/Zi (Debug-Datenbank) zu kompilieren, die funktioniert fein.

Jetzt habe ich ein Drittanbieter-SDK, das mit einer statischen Bibliothek, aber keine PDB-Datei kommt. Sobald ich diese Datei in Debug verbinden, erhalte ich

LNK4099: 3rd-party.lib(3rd-party.obj) : warning LNK4099: PDB "vc90.pdb" was not found "3rd-party.lib(3rd-party.obj)" or with "C:\OutDir\vc90.pdb" 

Bitte beachten Sie, dass diese Meldung irreführend, da Platzierung vc90.pdb neben 3rd-party.lib das Problem nicht lösen, da der Quellcode und pdb dieser 3rd-Party-Lib ist nicht verfügbar, also würde der Linker sich dann immer noch beschweren.

Um diese Linker-Warnung loszuwerden, was sind meine Optionen hier?

+0

Der einfachste Weg, wenn Sie einen VS-Post 2010 (also 2012/2013/2015) verwenden, ist das Hinzufügen der Option/ignore: 4099 zum Linker. Sollte diese spezielle Warnung ignorieren. Sicher, dass vor 2012 diese Warnung ausdrücklich ignoriert wurde ... Es existierte aber war eine Art "Ja, aber es ist uns egal" Warnung. – Gibet

+0

/ignorieren: 4099 funktioniert tatsächlich. Der Nachteil ist, ich möchte nicht, dass LNK4099 vollständig unterdrückt wird, aber das ist besser als nichts. –

+0

@Gibet: Bitte machen Sie aus Ihrem Kommentar eine Antwort. Es ist eine gute Antwort und wird Menschen in der Zukunft helfen. Sie finden es eher, wenn es eine Antwort ist. –

Antwort

2

Der einfachste Weg, wenn Sie einen VS-Post 2010 (also 2012/2013/2015) verwenden, ist das Hinzufügen der Option/ignore: 4099 zum Linker. Sollte diese spezielle Warnung ignorieren. Sicher, dass vor 2012 diese Warnung ausdrücklich ignoriert wurde ... Es existierte aber war eine Art "Ja, aber es ist uns egal" Warnung.

Komplexer Weise ... Wenn Sie die "Energie/Motivation/fortgeschrittener Benutzer Mut/Visual Studio 2010 oder vorher [2008/VC6/...]" haben Sie können tatsächlich die Symbole, die während der Verknüpfung verwendet werden, mit der lib Befehl lib /list obj.lib. Sie erhalten ein beleuchtetes Objekt in der Lib, das Sie mit dem Befehl lib /extact ../path/to/my/obj extrahieren können. DANN müssen Sie den Debug-Abschnitt mit dem dumpbin /section:.debug$ extrahieren Und dort finden Sie das Problem pdb ... mit/FD Befehl können Sie die pdb korrekt neu verknüpfen. Es ist irgendwie viel Arbeit. Dies ist die kurze Zusammenfassung dessen, was Sie hier finden können: https://cldoten.wordpress.com/2009/07/01/vs2008-fixing-the-warning-pdb-vc90-pdb-not-found/ Folgen Sie dem Link, den ich vorsichtig gab.

Offensichtlich ist die ignore-Methode wahrscheinlich die einfachste und weniger problematisch, vor allem, wenn Sie viele Bibliotheken von Drittanbietern verwenden.

+0

Ich akzeptiere diese Antwort, weil/ignoriere: 4099 hat funktioniert. Ich habe nicht getestet, die Symbole zu extrahieren, und ich bin mir nicht sicher, ob dies repariert werden kann, wenn ich nicht die PDB habe. Es könnte immer noch einen Versuch wert sein. –

Verwandte Themen