[C++, SFML] Błąd przy próbie uruchomienia aplikacji spoza środowiska


(rycerz2000) #1

Ostatnio zacząłem swoją przygodę z SFML w C++. Wszystko robiłem tak jak jest opisane tutaj. Kody z kursu oraz moje eksperymenty kompilują się, wszystko działa tak ja powinno ale zauważyłem że tylko gdy aplikację uruchamiam z CodeBlocks. Gdy próbuję uruchomić aplikację z poza środowiska (uruchamiam plik .exe) to wyskakuje błąd: Uruchomienie tej aplikacji nie powiodło się, ponieważ nie znaleziono libgcc_s_sjlj-1.dll. Ponowne zainstalowanie aplikacji może naprawić ten problem. Pobrałem ten plik dll z internetu i dodałem do katalogu z plikiem .exe oraz kolejny którego braku później się czepiało (libstdc++-6.dll). Potem znalazłem na kompie następne 2 dll-ki których nie znalazło: libgcc_s_dw2-1.dll oraz libwinpthread-1.dll (pozostałość po Qt). Teraz pojawił się inny błąd: Nie znaleziono punktu wejścia procedury __gxx_personality_sj0 w bibliotece libstdc++-6.dll. Dlaczego ciągle wyskakują błędy? Co zrobić żeby można było uruchomić program spoza środowiska?

Mam CodeBlocks 16.01 niedawno pobrany (wcześniej miałem 13.12). Windows Vista. SFML 2.3.2 GCC 4.8.1 TDM (SJLJ) - 32-bit


(kostek135) #2

Dzieje się tak, bo nie dołączasz zależności do standardowej biblioteki GCC. Najprościej skorzystać z oficjalnego sposobu rozwiązywania dependency-hell na Windows czyli statycznego linkowania jak w linku: http://stackoverflow.com/a/6405064.


(rycerz2000) #3

Podany przez Ciebie link nie działa.

Zainstalowałem i skonfigurowałem teraz też SFML na Visual C++ 2010 i wszystko działa. Wolałbym pisać w CodeBlocks ale w Visual C++ też będzie.


(kostek135) #4

Można było się domyśleć, że na SO hashe postów nie maja nawiasów (jakimś cudem dokleił się jako ostatni znak do link-u). Poprawiłem link u góry.


(rycerz2000) #5

Ok, dzięki.

Jeszcze raz skopiowałem pliki libgcc_s_sjlj-1.dll, libwinpthread-1.dll i libgcc_s_sw2-1.dll do katalogu z aplikacją, w katalogu MinGW/bin znalazłem plik libstdc+±6.dll i również go skopiowałem do katalogu z plikiem .exe. Teraz aplikacja się uruchamia.

Naprowadził mnie temat do którego podałeś link, w jednej z odpowiedzi pisze o użyciu libstdc+±6.dll z katalogu MinGW/bin.