Stworzyłem prosty program w C ++ z Code :: Blocks.
Jeśli uruchomię go z Code :: Blocks, działa poprawnie; ale jeśli uruchomię go przez podwójne kliknięcie pliku wykonywalnego, pojawi się okno z następującym komunikatem:
Nie można uruchomić programu, ponieważ na komputerze brakuje biblioteki libgcc_s_dw2-1.dll.
Spróbuj ponownie zainstalować program, aby rozwiązać ten problem.
Więc jaki jest problem? Co mam zrobić, żeby to naprawić?
W Eclipse znajdziesz go we właściwościach projektu> C / C ++ Build> Settings> MinGW C ++ Linker> Misc
Musisz dodać go do „flag konsolidatora” u góry; nigdzie indziej. Następnie po prostu odbuduj.
Zauważyłem, że łączenie ich statycznie powoduje eksplozję rozmiaru do 1400 kb nawet przy optymalizacji. Jest o 277 kb większy w porównaniu do zwykłego kopiowania przez udostępnione biblioteki DLL. Po wykonaniu UPXing wszystkiego jest o 388kb większy. Bardzo tu stracić / stracić. Wystarczy dołączyć biblioteki DLL, ponieważ użytkownik końcowy może zdecydować o ich usunięciu lub nie, jeśli zainstalował je w innym miejscu.
źródło
Code :: Blocks: dodaj „-static” w ustawieniach-> kompilator-> Ustawienia konsolidatora-> Inne opcje konsolidatora.
źródło
Znajdź tę bibliotekę dll na swoim komputerze i skopiuj ją do tego samego katalogu, w którym znajduje się plik wykonywalny.
źródło
Zobacz także . To rozwiązało mój problem.
Swoją drogą, czy to na pewno
compiler
flaga? Możelinker
jest tutaj bardziej odpowiednie określenie?źródło
Skopiuj plik „libgcc_s_dw2-1.dll” do pliku make.exe. (Jeśli używasz Msys, skopiuj go do \ msys \ bin) Upewnij się, że ścieżka do make.exe jest ustawiona w pliku env. ŚCIEŻKA (jeśli make.exe znajduje się najprawdopodobniej w folderze „bin”, a masz plik msys, to jest to \ msys \ bin) Kompiluj, runduj, debuguj itp.
źródło
Przejdź do drzewa MinGW http sourceforge.net. W sekcji Home / MinGW / Base / gcc / Version4 (lub jakiejkolwiek używanej wersji) / gcc-4 (wersja) / znajdziesz plik taki jak gcc-core-4.8.1-4-mingw32-dll.tar.lzma . Wyodrębnij go i przejdź do folderu bin, w którym znajdziesz swój plik libgcc_s_dw2-1.dll i inne pliki DLL. Skopiuj i wklej to, czego potrzebujesz, do katalogu bin.
źródło
Udało mi się to przezwyciężyć, używając „gcc” zamiast „g ++” w moim kompilatorze. Wiem, że to nie jest opcja dla większości ludzi, ale pomyślałem, że wspomnę o tym jako o opcji obejścia :)
źródło
Nie możesz umieścić go w system32 lub czymś takim, jak robisz z innymi plikami dll, aby każdy program, który próbujesz uruchomić, nie miał tego problemu na twoim komputerze?
Potrzebuję tylko ścieżki, gdzie ją umieścić.
To trochę denerwujące, gdy umieszczam go w katalogu za każdym razem, gdy uruchamiam program, który właśnie zbudowałem ...
Edycja: znalazłem rozwiązanie:
źródło
Po prostu przejdź do Ustawienia >> Kompilator i debuger, a następnie kliknij kartę Ustawienia konsolidatora i przejdź do kontrolki edycji „Inne opcje konsolidatora” i wklej: „-static-libgcc -static-libstdc ++” do niego, nie ma opcji flagi kompilatora w opcjach Compiler Flags dla Code :: Blocks, więc to jest sposób na rozwiązanie tego problemu. Przyszedłem tutaj również szukając rozwiązania, a jeden facet, który napisał o "-static-libgcc -static-libstdc ++" podał właściwy pomysł i Resztę wymyśliłem przypadkowo, ale zadziałało, plik jest teraz klikalny z zewnątrz Code :: Blocks, działa bezpośrednio z pulpitu.
źródło
Dodaj ścieżkę do tej biblioteki dll do zmiennej środowiskowej PATH.
źródło
W tym -static-libgcc na linii opracowującym, rozwiązuje ten problem
Według: @hardmath
Możesz także utworzyć alias w swoim profilu [.profile], jeśli korzystasz na przykład z MSYS2
Teraz twoje polecenie GCC również przechodzi ;-)
źródło
Dodanie „-static” do innych opcji konsolidatora rozwiązuje ten problem. Miałem ten sam problem po przetestowaniu tego na innym systemie, ale nie na własnym, więc nawet jeśli nie zauważyłeś tego w swoim systemie programistycznym, powinieneś sprawdzić, czy masz ten zestaw, jeśli łączysz statycznie.
Kolejna uwaga, skopiowanie biblioteki DLL do tego samego folderu, w którym znajduje się plik wykonywalny, nie jest rozwiązaniem, ponieważ jest sprzeczne z ideą łączenia statycznego.
Inną opcją jest użycie wersji TDM MinGW, która rozwiązuje ten problem.
Zaktualizuj edycję: może to nie rozwiązać problemu dla wszystkich. Innym powodem, który niedawno odkryłem, jest to, że używasz biblioteki skompilowanej przez kogoś innego, w moim przypadku był to SFML, który został nieprawidłowo skompilowany i wymagał biblioteki DLL, która nie istniała, ponieważ została skompilowana z inną wersją MinGW niż ta, którą ja posługiwać się. Używam kompilacji krasnoluda, ta używała innej, więc nigdzie nie miałem biblioteki DLL i oczywiście nie chciałem jej, ponieważ była to kompilacja statyczna. Rozwiązaniem może być znalezienie innej kompilacji biblioteki lub zbudowanie jej samodzielnie.
źródło
Pracując z msys2 otrzymałem ten sam błąd podczas próby wykonania wersji mojego projektu w środowisku debugowania. Rozwiązanie mojego problemu jest oczywiste: użyj pliku wykonywalnego z symbolami debugowania.
źródło
W CodeBlocks możesz przejść do Ustawienia ... Kompilator ... i wybrać albo 1) dwa elementy w niebieskim polu albo 2) jeden element w zielonym polu
źródło
Jeśli zastanawiasz się, skąd możesz pobrać udostępnioną bibliotekę (chociaż nie będzie to działać na urządzeniach Twojego klienta, chyba że dołączysz dll), tutaj znajduje się link: https://de.osdn.net/projects/mingw/downloads/72215/ libgcc-9.2.0-1-mingw32-dll-1.tar.xz /
źródło