Rozwiązywanie problemów z kompilatorem Microsoft Visual C++ lub konsolidatorem Visual C++

Ten artykuł zawiera rozwiązania dotyczące rozwiązywania problemów z kompilatorem Visual C++ lub konsolidatorem Visual C++.

Dotyczy: Microsoft Visual C++ 2010 Express, Visual Studio
Oryginalny numer KB: 974229

Akcja

Podczas badania możliwego problemu z kompilatorem lub konsolidatorem programu Microsoft Visual C++ ważne jest uzyskanie jak największej ilości informacji na temat procesu kompilacji i używanych opcji. W tym artykule omówiono kilka wskazówek dotyczących rozwiązywania problemów, które pomogą rozwiązać problem z kompilacją lub przechwycić kompleksowe informacje dotyczące pomocy technicznej firmy Microsoft.

Rezolucja

  • Problemy kompilatora

    W przypadku problemów z kompilatorem, takich jak wewnętrzne błędy kompilatora (tj. C1001), zawieszenia lub awarie, może być przydatne przechwycenie wyników działania preprocesora C/C++, aby zapewnić uproszczony i powtarzalny przykład problemu. W środowisku IDE języka Visual C++ można to zrobić, ustawiając właściwość Generate Preprocessed File na With Line Numbers (/P) lub Without Line Numbers (/EP /P). Tę właściwość można znaleźć na stronach właściwości projektu w obszarze Właściwości konfiguracji, C/C++, Ustawienia preprocesora.

    To ustawienie można ustawić na poziomie projektu, wybierając z menu Projekt opcję Właściwości, w którym to przypadku zostaną wygenerowane pliki .i dla wszystkich plików źródłowych w projekcie, lub można je ustawić dla pojedynczego pliku, klikając prawym przyciskiem myszy dany plik w Eksploratorze rozwiązań i wybierając Właściwości z menu kontekstowego, aby wyświetlić okno dialogowe właściwości tego pliku.

    Przełącznik kompilatora /P kieruje CL.EXE do przechwytywania wyjścia preprocesora do pliku. Dodanie /EP spowoduje pominięcie dodawania informacji o numerze wiersza do wynikowego pliku. /P jest wystarczająca, ale /EP /P wygeneruje mniejszy plik wyjściowy. Wygenerowany plik wyjściowy preprocesora będzie miał taką samą nazwę jak plik źródłowy kompilowany, ale z rozszerzeniem .i, na przykład file1.cpp generuje plik wyjściowy preprocesora file1.i w tym samym katalogu.

    Uwaga / Notatka

    Kompilacja będzie kontynuowana poza fazę preprocesora, gdy używasz tego przełącznika; to znaczy, żaden plik .OBJ nie zostanie wygenerowany przez kompilator i może pojawić się błąd linkowania odzwierciedlający fakt, że nie można odnaleźć plików OBJ.

    Plik wyjściowy preprocesora można skompilować spoza kontekstu projektu programu Visual Studio. Plik .i zawiera wszystkie informacje o kodzie pliku nagłówka, zamianie makr i wstępnie przetworzonej dyrektywie kompilatora potrzebne do kompilacji tego konkretnego .C pliku lub .CPP pliku źródłowego. Innymi słowy, jest to samodzielny moduł, który powinien być w stanie odtworzyć problem kompilacji bez żadnych zależności od innych plików. Wynikowy plik często będzie duży i zawiera dużą ilość białych znaków.

  • Problemy z łączem

    W przypadku problemów z konsolidatorem (błędy typu LNKxxxx) można użyć przełącznika wiersza polecenia konsolidatora /LINKREPRO, aby wygenerować przypadek testowy zawierający tylko dane wejściowe konsolidatora bez żadnej zależności od plików źródłowych. /LINKREPRO używa następującej składni:

    /LINKREPRO:<path>

    '<path>' to pełna ścieżka do pustego folderu w lokalnym systemie plików. Ten folder musi już istnieć — konsolidator nie utworzy go automatycznie i wygeneruje błąd, jeśli folder nie istnieje.

    Ta opcja nie jest widoczna bezpośrednio w systemie projektu. Aby dodać go do kompilacji, otwórz menu Właściwości projektu z menu Projekt . W Właściwościach konfiguracji, Linker, Wiersz polecenia, w polu edycyjnym Opcje dodatkowe wprowadź przełącznik /LINKREPRO:<path> wraz z ukośnikiem, a następnie zamień ścieżkę na wcześniej istniejącą ścieżkę folderu lokalnego. Na przykład: /LINKREPRO:C:\TEMP\LINKREPRO\.

    Jeśli w tym polu edycji znajdują się inne opcje linkera, rozdziel je przecinkami.

    Alternatywnie można użyć zmiennej środowiskowej LINK_REPRO . Jeśli zmienna środowiskowa LINK_REPRO istnieje, linker odczytuje ścieżkę wyjściową z tej zmiennej i generuje linkrepro. Przełącznik /LINKREPRO nie jest wymagany w przypadku korzystania ze zmiennej środowiskowej LINK_REPRO . Aby użyć zmiennej środowiskowej LINK_REPRO :

    1. Otwórz wiersz polecenia programu Visual Studio. Jest to instalowane w menu Start w folderze Visual Studio w podfolderze Visual Studio Tools.

    2. Utwórz zmienną LINK_REPRO środowiskową wskazującą istniejący i pusty katalog, na przykład: SET LINK_REPRO=C:\TEMP\LINKREPRO\.

    3. Uruchom program Visual Studio z tego samego wiersza polecenia, aby korzystał z tej samej kopii zmodyfikowanego środowiska.

    4. Otwórz projekt i przeprowadź pełną rekonstrukcję projektu.

    Po wywołaniu LINK.EXE w kompilacji skopiuje wszystkie elementy potrzebne do połączenia projektu z katalogem linkrepro. Wśród skopiowanych plików będą pliki obiektów (.OBJ), wymagane pliki biblioteki (.LIB), w tym biblioteki firmy Microsoft i plik odpowiedzi konsolidatora (LINK.RSP), aby LINK nie był już zależny od pliku rozwiązania.

    Aby potwierdzić, że masz wszystkie pliki niezbędne do odtworzenia problemu z łączem, możesz uruchomić LINK w katalogu określonym przez zmienną środowiskową LINK_REPRO, przy użyciu pliku odpowiedzi linkera wygenerowanego przez linkrepro: LINK @link.rsp.

    Przed wykonaniem tej czynności użyj następującego polecenia, aby wyłączyć tę funkcję, jeśli używasz zmiennej środowiskowej wiersza polecenia: SET LINK_REPRO=.

    Możesz również użyć tego procesu, aby zweryfikować pliki związane z tworzeniem biblioteki podczas korzystania z LIB.EXE lub LINK /LIB.

Disclaimer

Zastrzeżenie dotyczące szybkiego publikowania

ARTYKUŁY SZYBKIEGO PUBLIKOWANIA ZAWIERAJĄ INFORMACJE BEZPOŚREDNIO Z ORGANIZACJI POMOCY TECHNICZNEJ FIRMY MICROSOFT. ZAWARTE W NINIEJSZYM DOKUMENCIE INFORMACJE SĄ TWORZONE W ODPOWIEDZI NA POJAWIAJĄCE SIĘ LUB UNIKATOWE TEMATY ALBO MAJĄ UZUPEŁNIAĆ INNE INFORMACJE BAZY WIEDZY.

Zrzeczenie odpowiedzialności

FIRMA MICROSOFT I/LUB JEJ DOSTAWCY NIE SKŁADAJĄ ŻADNYCH OŚWIADCZEŃ ANI GWARANCJI DOTYCZĄCYCH PRZYDATNOŚCI, NIEZAWODNOŚCI LUB DOKŁADNOŚCI INFORMACJI ZAWARTYCH W DOKUMENTACH I POWIĄZANYCH GRAFIKACH OPUBLIKOWANYCH NA TEJ STRONIE INTERNETOWEJ (MATERIAŁY) W DOWOLNYM CELU. MATERIAŁY MOGĄ ZAWIERAĆ NIEDOKŁADNOŚCI TECHNICZNE LUB BŁĘDY TYPOGRAFICZNE I MOGĄ BYĆ ZMIENIANE W DOWOLNYM MOMENCIE BEZ POWIADOMIENIA.

W MAKSYMALNYM ZAKRESIE DOZWOLONYM PRZEZ OBOWIĄZUJĄCE PRAWO, MICROSOFT I/LUB JEGO DOSTAWCY ZAPRZECZAJĄ I WYŁĄCZAJĄ WSZYSTKIE OŚWIADCZENIA, GWARANCJE I WARUNKI, ZARÓWNO WYRAŹNE, DOROZUMIANE, JAK I USTAWOWE, W TYM, ALE NIE OGRANICZAJĄC SIĘ DO OŚWIADCZEŃ, GWARANCJI LUB WARUNKÓW TYTUŁU, NIENARUSZENIA, ZADOWALAJĄCEGO STANU LUB JAKOŚCI, PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU W ZWIĄZKU Z MATERIAŁAMI.