Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: pekfos
Kurs C++

Program nie uruchamia się z exe: brak libgcc_s_dw2-1.dll, libstdc++-6.dll

[pytanie/odpowiedź] Nie znaleziono libgcc_s_dw2-1.dll, libstdc++-6.dll, lub podobnych. Program uruchamia się ze IDE (np Code::Blocks), ale nie z poziomu pliku exe.

Program nie uruchamia się z exe: brak plików libgcc_s_dw2-1.dll, libstdc++-6.dll

Program działa, gdy jest uruchamiany z poziomu środowiska programistycznego (np Code::Blocks), ale przy próbie uruchomienia go z pliku .exe pojawia się komunikat błędu informujący o braku jednego z plików: libgcc_s_dw2-1.dll, libstdc++-6.dll. W praktyce brakuje obu, błąd związany z drugim pojawi się, gdy naprawi się pierwszy błąd. Rozwiązania na to są dwa: dostarczyć wymagane pliki, lub sprawić, by nie były wymagane.

Rozwiązanie A: statyczne linkowanie

Aby te dwie biblioteki zostały dołączone do programu statycznie, wystarczy dodać opcję linkera -static. W Code::Blocks można to dodać w globalnych ustawieniach kompilatora: Settings/Compiler.. Zakładka Linker settings, Other linker options.
Program nie będzie wymagać tych plików do uruchomienia, ale rozmiar pliku exe będzie większy.

Rozwiązanie B: dostarczenie brakujących plików

Te pliki są na komputerze, tylko system operacyjny mając sam plik exe, nie wie gdzie ich szukać. Pierwszą sprawdzaną lokalizacją jest katalog, w którym znajduje się ten plik exe i tutaj te pliki powinny trafić. Te 2 pliki znajdują się w katalogu bin kompilatora.
Jeśli nie wiesz, gdzie znajduje się twój kompilator, można to odczytać z Code::Blocks. Settings/Compiler.. Zakładka Toolchain executables. Będzie tam podana ścieżka do katalogu, który zawiera katalog bin (Compiler's installation directory)
Tym sposobem można naprawić dowolny błąd brakującego pliku DLL.

Rozwiązanie C: poprawne zainstalowanie kompilatora

Instalowanie GCC jak należy to sztuka, która chyba wymarła. Gdy kompilator jest 'poprawnie' zainstalowany, nie potrzeba nawet środowiska programistycznego, by z niego skorzystać. Jeśli wszystko działa pod takim Code::Blocks, to brakuje tylko ostatniego kroku - dodania ścieżki do kompilatora do PATH. Wejdź we właściwości systemu (Win+R, sysdm.cpl - dało się jakoś do tego dojść przez 'Mój Komputer'..), zakładka Zaawansowane, przycisk Zmienne środowiskowe. Otwiera się okno, które pozwala manipulować zmiennymi środowiskowymi dla aktualnego użytkownika, lub ogólnymi dla systemu. Znajdź tam PATH (lub Path - wielkość liter nie ma większego znaczenia w Windowsie), naciśnij Edytuj i dodaj ścieżkę do katalogu bin kompilatora (jeśli nie wiesz gdzie to jest, patrz: Rozwiązanie B). Jeśli operujesz na starszym Windowsie, to okienko które się otworzy będzie zawierać po prostu jedno pole tekstowe z wartością zmiennej. Dopisz po prostu ścieżkę na koniec, nie zapomnij tylko o średniku oddzielającym wpisy. Na Windows 10 te okienko wygląda zupełnie inaczej, ale raczej nie wymaga żadnych wyjaśnień. Zatwierdź wszystkie zmiany i jeśli wszystkie kroki zostały wykonane poprawnie, to kompilatora można użyć z poziomu cmd:
C:\Users\admin>g++
g++: fatal error: no input files
compilation terminated.
Teraz system wie, gdzie znaleźć kompilator i będzie też wiedzieć, gdzie znaleźć te pliki DLL, gdyż ścieżki z PATH również są przeszukiwane pod tym kątem.
Te pliki DLL wciąż są wymagane, tylko system wie gdzie je znaleźć. Pliki exe będą mniejsze, ale nie zapomnij dołączyć tych plików, gdy przeniesiesz program na inny komputer.