| Termin | Definicja |
|---|---|
| Błąd linkera – brak biblioteki runtime | Błąd linkera wskazujący brak biblioteki runtime pojawia się podczas kompilacji, gdy proces łączenia (linkowania) nie może odnaleźć pliku .lib lub .dll wymaganego przez wybrane środowisko uruchomieniowe (np. MSVC Redistributable). Czym jest błąd linkera związany z brakiem biblioteki runtimeBłąd linkera – brak biblioteki runtime pojawia się na etapie łączenia programu, czyli po zakończeniu kompilacji poszczególnych plików źródłowych. Kompilator może poprawnie przetworzyć kod i utworzyć pliki obiektowe, ale linker nie jest w stanie zbudować kompletnego pliku wykonywalnego, ponieważ nie znajduje elementów wymaganych przez środowisko uruchomieniowe. Najczęściej chodzi o bibliotekę statyczną z rozszerzeniem Biblioteka runtime zawiera składniki wspierające działanie programu, których nie trzeba umieszczać bezpośrednio w każdym pliku źródłowym. Mogą to być między innymi funkcje obsługi pamięci, operacji wejścia i wyjścia, wyjątków, wielowątkowości, konwersji danych oraz innych podstawowych mechanizmów wykorzystywanych przez dany język i jego narzędzia. Jeżeli projekt został przygotowany dla konkretnej wersji środowiska, a na komputerze znajduje się inna wersja bibliotek, proces linkowania może zakończyć się komunikatem o nierozpoznanym symbolu, braku pliku biblioteki albo niezgodności architektury. W komunikatach spotyka się między innymi informacje takie jak Kontekst techniczny i porównanie etapów budowania programuProces tworzenia aplikacji składa się z kilku powiązanych etapów. Najpierw kod źródłowy jest analizowany i tłumaczony przez kompilator na pliki pośrednie. Następnie linker scala te pliki z bibliotekami wskazanymi w konfiguracji projektu. Dopiero po pomyślnym zakończeniu linkowania powstaje plik wykonywalny lub biblioteka wynikowa. Brak biblioteki runtime różni się więc od błędu składniowego, który powstaje podczas analizy kodu, oraz od błędu występującego dopiero przy uruchamianiu programu. W przypadku brakującego pliku Istotne znaczenie ma również zgodność środowiska. Program 32-bitowy powinien korzystać z bibliotek przeznaczonych dla tej samej architektury, a program 64-bitowy z odpowiednich bibliotek 64-bitowych. Podobnie ważna jest zgodność narzędzi, języka i modelu runtime. W projektach tworzonych w środowisku Microsoft Visual C++ często wykorzystywany jest pakiet MSVC Redistributable, jednak sama instalacja dowolnej jego wersji nie musi rozwiązać problemu. Należy ustalić, z jakiego zestawu narzędzi korzysta aplikacja, czy wymagany jest wariant x86 lub x64 oraz czy konfiguracja projektu wskazuje właściwe katalogi. Warto odróżnić bibliotekę dołączaną statycznie od biblioteki ładowanej dynamicznie. Przy linkowaniu statycznym niezbędne fragmenty kodu mogą zostać włączone do pliku wynikowego, przez co aplikacja ma mniej zależności podczas uruchamiania, ale może mieć większy rozmiar. Przy linkowaniu dynamicznym część funkcji pozostaje w osobnym pliku DLL, który musi być dostępny w odpowiednim miejscu i zgodny z programem. Zmiana sposobu linkowania bez sprawdzenia zależności może jedynie przenieść błąd z etapu budowania na etap uruchamiania. Typowe problemy prowadzące do braku biblioteki runtimeJedną z najczęstszych przyczyn jest brak wpisu w ustawieniach linkera. Biblioteka może znajdować się na dysku, lecz projekt nie zna ścieżki do katalogu zawierającego plik Problem może wynikać z niepełnej instalacji zestawu programistycznego. Usunięcie części narzędzi, przeniesienie projektu na inny komputer albo aktualizacja środowiska może spowodować, że pliki nagłówkowe pozostaną dostępne, natomiast biblioteki binarne zostaną usunięte lub znajdą się w innej lokalizacji. Podobny efekt występuje po zmianie wersji kompilatora, gdy projekt nadal odwołuje się do katalogów należących do poprzedniej instalacji. Częstym źródłem błędów jest pomieszanie konfiguracji. Biblioteka przygotowana dla trybu Debug może nie pasować do kompilacji Release, a pliki przeznaczone dla jednej platformy mogą nie współpracować z programem budowanym dla innej. Należy zwrócić uwagę na ustawienia języka, runtime library, typ kodu, architekturę oraz kolejność przeszukiwanych katalogów. Przy korzystaniu z bibliotek zewnętrznych trzeba także upewnić się, czy pobrano kompletny pakiet, a nie tylko dokumentację lub pliki nagłówkowe. W komunikacie może pojawić się nierozpoznany symbol zamiast nazwy brakującego pliku. Taki przypadek nie zawsze oznacza zwykły brak biblioteki. Przyczyną może być niezgodna sygnatura funkcji, inny sposób dekorowania nazw, konflikt ustawień kompilatora albo użycie kodu skompilowanego z innymi opcjami. Pomocne jest odczytanie pełnego komunikatu, ustalenie biblioteki zawierającej wskazany symbol i porównanie jej z wersją używaną przez pozostałe elementy projektu. Nie należy też bez sprawdzenia kopiować przypadkowych plików DLL do katalogu systemowego. Taka metoda może ukryć właściwą przyczynę, doprowadzić do konfliktu wersji lub naruszyć działanie innych programów. Bezpieczniejsze jest ustalenie źródła biblioteki, ponowne zainstalowanie właściwego pakietu, uporządkowanie ścieżek projektu oraz sprawdzenie zależności przy użyciu narzędzi przeznaczonych do analizy plików wykonywalnych. Kiedy najlepiej zlecić diagnozę specjalistom - Błąd linkera – brak biblioteki runtimeWsparcie serwisowe może być potrzebne, gdy błąd powtarza się mimo ponownej instalacji środowiska, projekt korzysta z kilku wersji bibliotek albo nie jest jasne, czy problem dotyczy konfiguracji programu, systemu czy uszkodzonego nośnika danych. Szczególnej uwagi wymagają sytuacje, w których oprócz komunikatów linkera występują samoczynne restarty, problemy z instalowaniem pakietów, uszkodzenia plików lub niestabilna praca komputera. Wtedy diagnoza powinna obejmować nie tylko samą aplikację, lecz także stan systemu i poprawność przechowywanych danych. W Warszawie takie przypadki można zgłosić do serwisu laptopów i komputerów PC działającego pod nazwą Warszawskie Pogotowie Komputerowe 24/7. Zwykle naprawy są prowadzone w czasie do 3 dni roboczych, zależnie od zakresu problemu i dostępności właściwych elementów. Przed przekazaniem urządzenia warto przygotować pełny komunikat błędu, nazwę używanego środowiska programistycznego, informację o ostatnich aktualizacjach oraz opis zmian poprzedzających wystąpienie usterki. Przy zgłoszeniu należy zaznaczyć, czy błąd występuje podczas kompilacji, przy uruchamianiu gotowego programu, czy po aktualizacji systemu. Pomocne będzie także wskazanie, czy aplikacja jest przeznaczona dla architektury 32-bitowej czy 64-bitowej oraz czy korzysta z bibliotek dostarczonych wraz z projektem. Takie dane ułatwiają odtworzenie problemu, ograniczają ryzyko usunięcia potrzebnych zależności i pozwalają rozdzielić błąd konfiguracji od awarii sprzętowej. |