Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 zmiennaLINK_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 środowiskowejLINK_REPRO
. Aby użyć zmiennej środowiskowejLINK_REPRO
:Otwórz wiersz polecenia programu Visual Studio. Jest to instalowane w menu Start w folderze Visual Studio w podfolderze Visual Studio Tools.
Utwórz zmienną
LINK_REPRO
środowiskową wskazującą istniejący i pusty katalog, na przykład:SET LINK_REPRO=C:\TEMP\LINKREPRO\
.Uruchom program Visual Studio z tego samego wiersza polecenia, aby współudzielił kopię zmodyfikowanego środowiska.
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.