Notatka
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 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
.idla 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
.OBJnie 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
.izawiera wszystkie informacje o kodzie pliku nagłówka, zamianie makr i wstępnie przetworzonej dyrektywie kompilatora potrzebne do kompilacji tego konkretnego.Cpliku lub.CPPpliku ź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 środowiskowaLINK_REPROistnieje, linker odczytuje ścieżkę wyjściową z tej zmiennej i generuje 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 korzystał z tej samej kopii zmodyfikowanego środowiska.
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.