Udostępnij za pośrednictwem


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 ułatwiają rozwiązanie problemu z kompilacją lub przechwytywanie kompleksowych informacji dotyczących pomoc techniczna firmy Microsoft.

Rozwiązanie

  • Problemy kompilatora

    W przypadku problemów kompilatora, takich jak wewnętrzne błędy kompilatora (tj. C1001), zawiesza się lub ulega awarii, może być przydatne przechwycenie danych wyjściowych preprocesora C/C++ w celu zapewnienia uproszczonego powtarzalnego przykładu 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 w menu Projekt, Właściwości w takim przypadku spowoduje wygenerowanie .i plików dla wszystkich plików źródłowych w projekcie lub można ustawić go dla pojedynczego pliku, klikając prawym przyciskiem myszy plik w Eksploratorze rozwiązań, wybierając menu kontekstowe Właściwości, aby wyświetlić okno dialogowe właściwości dla pojedynczego pliku.

    Przełącznik kompilatora /P kieruje CL.EXE w celu przechwytywania danych wyjściowych 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 pliku i, na przykład file1.cpp generuje plik1.i preprocesora w tym samym katalogu.

    Uwaga 16.

    Kompilacja będzie kontynuowana w fazie preprocesora podczas korzystania z tego przełącznika, czyli bez .OBJ pliku zostanie wygenerowany przez kompilator i może zostać wyświetlony błąd linku 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 obszarze Właściwości konfiguracji Konsolidator, Wiersz polecenia, w polu Edycja opcji dodatkowych wprowadź /LINKREPRO:<path> przełącznik (w tym ukośnik) i zastąp ścieżkę 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 konsolidatora, rozdziel je przecinkami.

    Alternatywnie można użyć zmiennej środowiskowej LINK_REPRO . Jeśli zmienna LINK_REPRO środowiskowa istnieje, konsolidator odczytuje ścieżkę wyjściową ze zmiennej środowiskowej i wygeneruje 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 współudzielił kopię zmodyfikowanego środowiska.

    4. Otwórz projekt i wykonaj ponownie kompilowanie całego 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 konsolidatora 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.

Zastrzeżenie

Zastrzeżenie dotyczące szybkiego publikowania

Artykuły szybkiego publikowania zawierają informacje bezpośrednio z organizacji pomocy technicznej firmy Microsoft. Informacje zawarte w niniejszym dokumencie są tworzone w odpowiedzi na pojawiające się lub unikatowe tematy albo mają uzupełniać inne informacje baza 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 żadnym 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 jej dostawcy nie mogą odzyskiwać i wykluczać wszystkich oświadczeń, gwarancji i warunków, w tym zarówno wyraźnych, domniemanych, jak i ustawowych, w tym, w odniesieniu do reprezentacji, gwarancji lub warunków tytułu, nienależących do naruszenia, zadowalającego stanu lub jakości, możliwości handlowej i przydatności do określonego celu, w odniesieniu do materiałów.