Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Błąd systemu podczas uruchamiania programów przez pliki .exe

Ostatnio zmodyfikowano 2018-01-22 23:21
Autor Wiadomość
CommonJoe
Temat założony przez niniejszego użytkownika
[C++] Błąd systemu podczas uruchamiania programów przez pliki .exe
» 2018-01-22 21:31:25
Witam wszystkich, ostatnio pobrałem nową wersję Code::Blocks (jest to 17.12), i od tego czasu nie jestem w stanie uruchomić ŻADNYCH plików '.exe' które generuje. Wyświetla się "błąd systemowy" jak poniżej:

"Nie można kontynuować wykonywania kodu, ponieważ nie znaleziono obiektu libgcc_s_dw2-1.dll. Ponowne zainstalowanie programu może rozwiązać ten problem."

Od razu mówię, że przeinstalowanie Code::Blocks'a nie rozwiązało problemu. Programy normalnie się uruchamiają jeśli wybieram opcję "Build and run" w Code::Blocks przez plik '.cpp'. Podejrzewam, że chodzi o coś z kompilatorem, bo przy programach skompilowanych na starej wersji programu problem nie występuje.
P-168926
pekfos
» 2018-01-22 22:08:20
Ponowne zainstalowanie programu może rozwiązać ten problem."
Od razu mówię, że przeinstalowanie Code::Blocks'a nie rozwiązało problemu.
Wiesz, w tym komunikacie nie chodziło o C::B, tylko o twój program. W katalogu bin kompilatora będzie plik libgcc_s_dw2-1.dll (oraz ten drugi), umieść je obok exe i będzie działać. Opcja linkera -static sprawia, że te pliki nie są wymagane.
P-168927
CommonJoe
Temat założony przez niniejszego użytkownika
» 2018-01-22 22:19:27
Wielkie dzięki, pomogło. Czyli chodziło o to, że programy wymagały jakiejś biblioteki, która nie była im dostarczana/linkowana przez kompilator, dopóki nie zaznaczyłem tej opcji ?
P-168928
DejaVu
» 2018-01-22 22:27:00
Tak. Biblioteki domyślnie są linkowane dynamicznie. Oznacza to, że np. funkcje biblioteki <iostream> (lub innych bibliotek standardowych) fizycznie znajdują się w DLL-kach, a nie wewnątrz Twojej aplikacji. W konsekwencji wspomniane DLL-ki są wymagane. Zaletą linkowania dynamicznego jest to, że Twoja aplikacja jest mniejsza. Wadą, że trzeba dorzucić do aplikacji wszystkie dll-ki od których uzależniłeś swój program.

Osobiście nie lubię DLL-ek i preferuję linkować wszystko co możliwe statycznie, no ale są zwolennicy linkowania dynamicznego i... nawet nie chcę wiedzieć jak wygląda ich środowisko produkcyjne :P
P-168930
pekfos
» 2018-01-22 22:27:35
Tak czy inaczej program wymaga tych bibliotek. Są dostarczane w przez kompilator w formie plików DLL oraz bibliotek statycznych. Ta opcja oznacza, by były użyte biblioteki statyczne i wszystko było zawarte w pliku exe. Alternatywnie możesz nie używać tej opcji i tylko skopiować te 2 pliki obok exe.
P-168931
CommonJoe
Temat założony przez niniejszego użytkownika
» 2018-01-22 23:02:50
Ok, trochę mi to rozświetliło w głowie, dzięki raz jeszcze.
P-168934
pekfos
» 2018-01-22 23:21:26
P-168935
« 1 »
  Strona 1 z 1