Program nie działa poza IDE Code::blocks

Odpowiedz Nowy wątek
2011-08-05 18:38
0

Witam!
Mam pewien problem z każdym programem, który stworzę w C::B. Jak uruchamiam w konsoli C::B wszystko działa, a jak uruchomię przez wiersz poleceń, to wywala błąd, że nie ma dll'ki - libgcc_s_dw2-1.dll. Poczytałem trochę w necie, instalowałem 3 razy różne wersje MinGW i 2 razy przeinstalowywałem C::B(raz z kompilatorem, raz bez) - problem cały czas.

Czy ktoś mógłby zarzucić działające rozwiązanie. Czytałem, żeby dodać do kompilacji flagę "-static-libgcc -static-libstdc++" - nie mam niestety pojęcia jak to uczynić kombinowałem w opcjach kompilatora, jest zakładka z flagami, ale nie ma opcji by dodać nową.

Problem pojawił się po zainstalowaniu Qt Creatora + SDK.

Pozostało 580 znaków

2011-08-05 18:42
Kumashiro
0
piternet napisał(a)

Mam pewien problem z każdym programem, który stworzę w C::B. Jak uruchamiam w konsoli C::B wszystko działa, a jak uruchomię przez wiersz poleceń, to wywala błąd, że nie ma dll'ki - libgcc_s_dw2-1.dll. Poczytałem trochę w necie, instalowałem 3 razy różne wersje MinGW i 2 razy przeinstalowywałem C::B(raz z kompilatorem, raz bez) - problem cały czas.

A jak tę bibliotekę wrzucisz do katalogu, którym leży .exe to mu się poprawia?

piternet napisał(a)

Czy ktoś mógłby zarzucić działające rozwiązanie. Czytałem, żeby dodać do kompilacji flagę "-static-libgcc -static-libstdc++" - nie mam niestety pojęcia jak to uczynić kombinowałem w opcjach kompilatora, jest zakładka z flagami, ale nie ma opcji by dodać nową.

Project -> Build options -> Compiler settings -> Other options...

Pozostało 580 znaków

2011-08-05 19:03
0
Kumashiro napisał(a)

A jak tę bibliotekę wrzucisz do katalogu, którym leży .exe to mu się poprawia?

Jak wrzucę tę jedną dllkę, to on się pluję o inną. Jak wrzucę exe'ka do katalogu z tymi dllkami(MinGw/bin/) to wtedy dopiero działa/

Kumashiro napisał(a)

Project -> Build options -> Compiler settings -> Other options...

Wkleiłem tam to polecenie. Nic się nie zmieniło?

edytowany 1x, ostatnio: piternet, 2011-08-05 19:04

Pozostało 580 znaków

2011-08-05 19:09
Kumashiro
0
piternet napisał(a)

Jak wrzucę tę jedną dllkę, to on się pluję o inną. Jak wrzucę exe'ka do katalogu z tymi dllkami(MinGw/bin/) to wtedy dopiero działa/

To sprawdź jakich bibliotek potrzebuje i albo skopiuj je do katalogu z plikiem wykonywalnym, albo skonfiguruj sobie środowisko. Może to będzie pomocne: http://msdn.microsoft.com/en-us/library/ms682586(v=vs.85).aspx

piternet napisał(a)

Wkleiłem tam to polecenie. Nic się nie zmieniło?

Zakładam, że nie tylko wkleiłeś, ale także i przebudowałeś projekt po tej zmianie.
Najwyraźniej ta flaga nie działa (np. z tym kompilatorem), albo coś źle robisz. Jeśli nie działa to tym lepiej, bo statycznej kompilacji powinno się unikać.

Pozostało 580 znaków

2011-08-05 19:10
Rev
0

Jeżeli nie masz bezwzględnej potrzeby statycznego linkowania runtime C/C++ to po prostu rozprowadzaj dll'ki razem z aplikacją.


Pozostało 580 znaków

2011-08-05 19:20
0

Mhm, no dobra, ale C++ wykorzystuję głównie do rozwiązywania zadań algorytmicznych np. z OI i raczej nie bardzo uśmiecha mi się trzymania pliku exe wraz z tymi dwoma dllkami. Wcześniej po prostu zainstalowałem C::B razem z MinGW i wszystko działało, szczerze mówiąc to nawet nie mam pojęcia czy wtedy kompilowałem statycznie czy dynamiczne. Problem pojawił się po zainstalowaniu Qt creatora, nawet go odinstalowałem, ale nie pomogło.

Wypowie się ktoś jeszcze? Strasznie jestem zdenerwowany tym problemem, bo np. chcę uruchomić program z konsoli i przetestować na jakichś testach(przekierowanie stdin na plik tekstowy) to mi się pluje o te dllki.

@edit
Jak zrobię sobie prosty plik cpp w np. notatniku, skopiuję do C:/MinGw/bin/ i tam za pomocą wiersza poleceń skompiluję poleceniem "g++ prog.cpp -static-libgcc -static-libstdc++" i potem skopiuje ten program na Pulpit to działa.
Pytanie więc brzmi tylko jak wymusić taką kompilację na c::B?

edytowany 4x, ostatnio: piternet, 2011-08-05 19:29

Pozostało 580 znaków

2011-08-05 20:01
msm
0

Nie chciałbym cię martwić, ale jeśli chcesz wysłać na SPOJa program który używa zewnętrznych bibliotek to się rozczarujesz...

Jak zrobię sobie prosty plik cpp w np. notatniku, skopiuję do C:/MinGw/bin/ i tam za pomocą wiersza poleceń skompiluję poleceniem "g++ prog.cpp -static-libgcc -static-libstdc++" i potem skopiuje ten program na Pulpit to działa.
Pytanie więc brzmi tylko jak wymusić taką kompilację na c::B?

Już dostałeś odpowiedź... Project -> Build options -> Compiler settings -> Other options... Na pewno dobrze to wkleiłeś?

Pozostało 580 znaków

2011-08-05 20:26
0

1)No a więc:
user image

W code::blocks się kompiluje i uruchamia w tej "IDEowej" konsoli, a jak uruchamiam przez cmd:
user image

2)Pan @up - sorki, ale już tego nie rozumiem. Siedzę w tym programowaniu w c++ zorientowanym na rozwiązywanie problemów algorytmicznych już dobry rok, większość czasu z c::b na pokładzie. Nigdy takiego problemu nie miałem. Wiem, że nie mogę wysłać rozwiązań korzystających z zewn. bibliotek jak np. BOOST, ale te dllki od MinGW to chyba nie są zewnętrzne biblioteki?
Nie rozumiem dlaczego to nagle przestało działać... Jakie są domyślne opcje kompilacji? Wcześniej jakoś to działało, a nic nie wpisywałem.

Bardzo proszę o pomoc, jestem już mocno sfrustrowanym tym wszystkim, dobre półtorej godziny siedzę nad tym.

Pozostało 580 znaków

2011-08-05 21:10
0

Sfrustrowany po półtorej godziny? Ja tydzień siedziałem nad Hello Worldem w Borlandzie z użyciem Allegro :D

Jak chcesz komuś wysłać program, to wysyłasz mu w wersji Release, nie Debug. Debug zostaw w spokoju, poza IDE taki program nie musi działać, nawet nie ma specjalnie obowiązku. Zmień na Release i potem dopiero kombinuj z DLLkami.

Jak ci pisze że brak jakiegoś DLL to go tam po prostu skopiuj obok tego exe.

Nie jest to żadna "zewnętrzna biblioteka", tylko zwykły runtime library, czy jak to się tam nazywa, w końcu nawet jakbyś kompilował w Visual Studio z kompilatorem od MS musiałbyś na wszelki wypadek dodać instalkę redista, a to też dodatkowe dlle.

Jeszcze jedno: kompilacja to trochę źle zrozumiane pojęcie mylone z "Budowaniem". Kompilacja to tylko zamiana języka na kod maszynowy, biblioteki nie mają nic do tego. Te komendy powinny być przy Linkerze, nie kompilatorze. Nie mam akurat przy sobie C::B żeby obejrzeć jak to tam wygląda.

edytowany 2x, ostatnio: Razi91, 2011-08-05 21:11

Pozostało 580 znaków

2011-08-05 21:21
Kumashiro

Czy czytałeś dokument, do którego link Ci postnąłem wyżej? Zamiast na siłę kompilować statycznie, zrób to porządnie i skonfiguruj sobie środowisko.

Jeśli nadal się upierasz przy statycznym wlinkowaniu libgcc, spróbuj przenieść te opcje do zakładki "Linker options". Jeżeli jednak program Ci wrzeszczy także o inne biblioteki, to wkompilowanie samego libgcc zapewne nic nie da.

Pozostało 580 znaków

2011-08-05 21:26
0

@EDIT
Wlinkowałem statycznie to libgcc, przeniosłem te komendy do zakładki Linker options. ZADZIAŁO, DZIĘKI.
Zastanawia mnie jednak, czemu to tak nagle przestało działać? Wcześniej nic nie ustawiałem i działało?

edytowany 1x, ostatnio: piternet, 2011-08-05 21:29
Mam taki niepewny pomysł, ale może wtedy miałeś odpowiednio ustawiony PATH, więc znajdował biblioteki, a teraz nie (możesz uruchomić gcc z dowolnego katalogu?) - Zjarek 2011-08-05 22:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0