Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält Lösungen für die Problembehandlung für Visual C++-Compiler oder Visual C++-Linker.
Gilt für: Microsoft Visual C++ 2010 Express, Visual Studio
Ursprüngliche KB-Nummer: 974229
Maßnahme
Bei der Untersuchung eines möglichen Problems mit dem Microsoft Visual C++-Compiler oder Linker ist es wichtig, so viele Informationen wie möglich über den Buildprozess und die verwendeten Optionen zu erhalten. In diesem Artikel werden einige Tipps zur Problembehandlung erläutert, mit denen Sie Ihr Buildproblem beheben oder umfassende Informationen für den Microsoft-Support erfassen können.
Beschluss
Compilerprobleme
Bei Compilerproblemen wie internen Compilerfehlern (d. h. C1001), Hängen oder Abstürzen kann es hilfreich sein, die Ausgabe des C/C++-Präprozessors zu erfassen, um ein vereinfachtes reproduzierbares Problembeispiel bereitzustellen. In der Visual C++-IDE kann dies erfolgen, indem Sie die Eigenschaft "Vorverarbeitete Datei generieren " auf "Mit Zeilennummern (/P)" oder "Ohne Zeilennummern" (/EP /P) festlegen. Diese Eigenschaft finden Sie unter den Projekteigenschaftenseiten unter konfigurationseigenschaften, C/C++, Preprocessor-Einstellungen.
Diese Einstellung kann auf Projektebene über das Menü "Projekt", "Eigenschaften" festgelegt werden, in welchem Fall
.i-Dateien für alle Quelldateien im Projekt generiert werden. Alternativ kann sie für eine einzelne Datei festgelegt werden, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei klicken und im Kontextmenü "Eigenschaften" auswählen, um den Eigenschaftendialog für die betreffende Datei zu öffnen.Der /P-Compilerschalter weist CL.EXE an, die Ausgabe des Präprozessors in eine Datei zu speichern. Durch das Hinzufügen von /EP wird das Hinzufügen von Zeilennummerninformationen zur resultierenden Datei unterdrückt. /P ist ausreichend, aber /EP /P generiert eine kleinere Ausgabedatei. Die generierte Vorprozessorausgabedatei hat denselben Namen wie die kompilierte Quelldatei, jedoch mit der Dateierweiterung a.i. Zum Beispiel erzeugt file1.cpp eine file1.i Vorprozessorausgabedatei im selben Verzeichnis.
Hinweis
Die Kompilierung wird bei Verwendung dieses Schalters über die Präprozessorphase hinaus fortgesetzt, d. h. es wird keine
.OBJDatei vom Compiler generiert, und Möglicherweise wird ein Linkfehler angezeigt, der die Tatsache widerspiegelt, dass OBJ-Dateien nicht gefunden werden können.Sie können die Präprozessorausgabedatei selbst außerhalb des Kontexts eines Visual Studio-Projekts kompilieren. Die
.i-Datei enthält alle Header-Datei-Codes, Makroersetzungen und vorverarbeiteten Compiler-Direktiven, die für die Kompilierung dieser bestimmten.C- oder.CPP-Quelldatei erforderlich sind. Anders ausgedrückt: Es handelt sich um ein eigenständiges Modul, das ein Kompilierungsproblem ohne Abhängigkeiten von anderen Dateien reproduzieren kann. Die resultierende Datei ist häufig groß und enthält einen großen Leerraum.Linkprobleme
Bei Linkerproblemen (LNKxxxx-Typfehler) können Sie den Befehlszeilenschalter "/LINKREPRO linker" verwenden, um einen Testfall zu generieren, der nur Linkereingaben ohne Abhängigkeit von Quelldateien enthält. /LINKREPRO verwendet die folgende Syntax:
/LINKREPRO:<path>'<path>'ist der vollständige Pfad zu einem leeren Ordner im lokalen Dateisystem. Dieser Ordner muss bereits vorhanden sein – der Linker erstellt ihn nicht automatisch und generiert einen Fehler, wenn der Ordner nicht vorhanden ist.Diese Option wird nicht direkt im Projektsystem verfügbar gemacht. Um sie einem Build hinzuzufügen, öffnen Sie das Projekteigenschaftenmenü im Menü "Projekt ". Geben Sie in Konfigurationseigenschaften, Linker, Befehlszeile, im Bearbeitungsfeld Zusätzliche Optionen den
/LINKREPRO:<path>Schalter (einschließlich des Schrägstrichs) ein, und ersetzen Sie den Pfad durch den bereits vorhandenen lokalen Ordnerpfad. Beispiel:/LINKREPRO:C:\TEMP\LINKREPRO\.Wenn sich in diesem Bearbeitungsfeld bereits andere Linkeroptionen befinden, trennen Sie sie durch Kommas.
Alternativ können Sie eine
LINK_REPROUmgebungsvariable verwenden. Wenn dieLINK_REPROUmgebungsvariable vorhanden ist, liest der Linker den Ausgabepfad aus der Umgebungsvariable und generiert einen Linkrepro. Der Switch "/LINKREPRO" ist bei Verwendung der UmgebungsvariableLINK_REPROnicht erforderlich. So verwenden Sie die UmgebungsvariableLINK_REPRO:Öffnen Sie eine Visual Studio-Eingabeaufforderung. Dies wird unter dem Startmenü im Visual Studio-Ordner unter dem Unterordner "Visual Studio Tools" installiert.
Erstellen Sie die Umgebungsvariable, die
LINK_REPROauf ein vorhandenes und leeres Verzeichnis zeigt, z. B.:SET LINK_REPRO=C:\TEMP\LINKREPRO\.Führen Sie Visual Studio über die gleiche Eingabeaufforderung aus, sodass sie eine Kopie der Umgebung teilt, die Sie geändert haben.
Öffnen Sie das Projekt, und führen Sie ein "Alles neu erstellen" des Projekts aus.
Wenn LINK.EXE im Build aufgerufen wird, kopiert es alles, was es benötigt, um Ihr Projekt in das Linkrepro-Verzeichnis zu verknüpfen. Unter den kopierten Dateien befinden sich Ihre Objektdateien (. OBJ), erforderliche Bibliotheksdateien (. LIB, einschließlich Microsoft-Bibliotheken und einer Linker-Antwortdatei (LINK). RSP), sodass LINK nicht mehr von Ihrer Lösungsdatei abhängig ist.
Um zu bestätigen, dass Sie alle erforderlichen Dateien zum Reproduzieren des Linkproblems haben, können Sie LINK in dem verzeichnis ausführen, das durch die LINK_REPRO Umgebungsvariable angegeben ist. Verwenden Sie dazu die linker-Antwortdatei, die von linkrepro generiert wird:
LINK @link.rsp.Verwenden Sie dazu den folgenden Befehl, um dieses Feature zu deaktivieren, wenn Sie die Befehlszeilenumgebungsvariable verwenden:
SET LINK_REPRO=.Sie können diesen Prozess auch verwenden, um die dateien zu überprüfen, die beim Erstellen einer Bibliothek beteiligt sind, wenn Sie LIB.EXE oder LINK /LIB verwenden.
Verzichtserklärung
Haftungsausschluss für schnelle Publikation
SCHNELLE VERÖFFENTLICHUNGSARTIKEL STELLEN INFORMATIONEN DIREKT AUS DER MICROSOFT-SUPPORTORGANISATION BEREIT. DIE HIERIN ENTHALTENEN INFORMATIONEN WERDEN ALS REAKTION AUF NEUE ODER EINDEUTIGE THEMEN ERSTELLT ODER SOLLEN ANDERE WISSENSBASISINFORMATIONEN ERGÄNZEN.
Haftungsausschluss
MICROSOFT UND/ODER DEREN LIEFERANTEN MACHEN KEINE ZUSICHERUNGEN ODER GARANTIEN ÜBER DIE EIGNUNG, ZUVERLÄSSIGKEIT ODER GENAUIGKEIT DER INFORMATIONEN IN DEN DOKUMENTEN UND VERWANDTEN GRAFIKEN, DIE AUF DIESER WEBSITE (DIE "MATERIALIEN") ZU IRGENDEINEM ZWECK VERÖFFENTLICHT WURDEN. DIE MATERIALIEN KÖNNEN TECHNISCHE UNGENAUIGKEITEN ODER TYPOGRAFISCHE FEHLER ENTHALTEN UND JEDERZEIT OHNE VORHERIGE ANKÜNDIGUNG ÜBERARBEITET WERDEN.
IM MAXIMALEN UMFANG, DER DURCH GELTENDES RECHT ERLAUBT IST, LEHNT MICROSOFT UND/ODER SEINE LIEFERANTEN ALLE VERTRETUNGEN, GARANTIEN UND BEDINGUNGEN AB, OB AUSDRÜCKLICH, KONKLUDEND ODER GESETZLICH, EINSCHLIEßLICH, ABER NICHT BESCHRÄNKT AUF VERTRETUNGEN, GARANTIEN ODER BEDINGUNGEN DES TITELS, NICHTVERLETZUNG, ZUFRIEDENSTELLENDE BEDINGUNG ODER QUALITÄT, HANDELSÜBLICHKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK, IN BEZUG AUF DIE MATERIALIEN.