Skocz do zawartości

Uważna Kompilacja


siomek

Rekomendowane odpowiedzi

Witam,

 

Mam następujący problem. Gdy skompiluję programw C/C++, fakt czy zadziała (chociaż nie zawsze) zależy od flag kompilatora. Oczywiście najlepiej działa przy -Os. Jednak gdy program uruchomię pod debuggerem, działa poprawnie. Jak mam to rozumieć? Da się skompilować program "uważnie", tzn. żeby kompilator najdokładniej "przyjrzał się" wszystkiemu?

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... To może być błąd kompilatora. Która wersja GCC? Z tym działaniem pod debuggerem to już gdzies kilka razy widziałem, ale nie wiem z czego to wynikało. Najlepiej by było, gdyby udało Ci się zrobić jakąś minimalną wersję progamu, przy której raz program działa, a raz nie.

 

Trochę za wysokie progi jak dla mnie :(

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... To może być błąd kompilatora. Która wersja GCC? Z tym działaniem pod debuggerem to już gdzies kilka razy widziałem, ale nie wiem z czego to wynikało. Najlepiej by było, gdyby udało Ci się zrobić jakąś minimalną wersję progamu, przy której raz program działa, a raz nie.

 

Trochę za wysokie progi jak dla mnie :(

I tu zaczynają się schody. Bo pod linuxem nie ma problemu. Działa bez żadnych flag. Co najwyżej flagi pomagają w szybkości i rozmiarze pliku.

Przyznam się szczerze, że ten problem wynikł pod win32, mingw 3.8, gcc 3.4.2.

 

<UWAGA>

Czemu nigdzie tego nie piszą...Przy dużej liczbie obliczeń numerycznych stosować flagi:

 

-Os -ffast-math

 

I teraz działa :-)

Odnośnik do komentarza
Udostępnij na innych stronach

Ja mam podobne klopoty z Fedorowatym GCC 4, juz zwatpilem w swoje umiejetnosci, kompilator rozdmuchiwal kod w czystym C, a sama aplikacja zachowala sie dosc dziwnie (przerywala w najdziwniejszych miejscach, zwalniala itp.), a pod GCC 3.2.x program kompiluje sie i dziala wysmienicie...

 

I stad moje pytanka:

1. Powie mi ktos czemu te barany (developerzy Fedory) wybrali eksperymentalne GCC 4 a nie stabilne np. GCC 3.4.4 jako domysly kompilator!?

2. Ma ktos jakies materialy na temat nprzystosowywania programow do kompilacji z GCC 4?

Odnośnik do komentarza
Udostępnij na innych stronach

kompilator rozdmuchiwal kod w czystym C, a sama aplikacja zachowala sie dosc dziwnie (przerywala w najdziwniejszych miejscach, zwalniala itp.), a pod GCC 3.2.x program kompiluje sie i dziala wysmienicie...

Były jakies ostrzeżenia podczas kompilacji? Używasz najnowszego gcc 4.0.1?

1. Powie mi ktos czemu te barany (developerzy Fedory) wybrali eksperymentalne GCC 4 a nie stabilne np. GCC 3.4.4 jako domysly kompilator!?

Bo GCC 4 nie jest eksperymentalne. Już o tym pisałem tutaj → http://www.fedora.pl/site/forum/index.php?...?showtopic=6115

 

Przeczytaj sobie komentarze deweloperów GCC → http://kerneltrap.org/node/5393#comment

 

/edit/

Przypomniał mi się jeszcze inny argument: w starszych wersjach nie ma gcj → brak obsługi Javy. Pociąga to za sobą brak OO.o2 czy Eclipse.

2. Ma ktos jakies materialy na temat nprzystosowywania programow do kompilacji z GCC 4?

Hmm.. Można przeczytać release notes i zobaczyć co się pozmienało w porównaniu do poprzedniej wersji → http://gcc.gnu.org/gcc-4.0/changes.html Inne źródła nie są mi znane :/

Odnośnik do komentarza
Udostępnij na innych stronach

Z tym czy GCC 4 jest juz uzyteczny w 100% to bym sie nie zgodzil, zobaczcie jak wyglada (chodzi o wielkosc, a co za tym idzie roznice w kompilacie) proste "Hello world!" zbudowane przez GCC 3 i GCC 4 i nie chodzi tu o optymalizacje...

Poza tym mialem przyjemnosc podyskutowac z developerem Gentoo, a mial on na temat stabilnosci GCC 4 inne zdanie niz gajownik, ale mniejsza o to.

 

@ gajopwnik, wielkie dzieki za te materialy bo mi pomogly, ale gdyby ktos jeszcze cos dorzucil to bym sie nie gniewal :P

Odnośnik do komentarza
Udostępnij na innych stronach

Z tym czy GCC 4 jest juz uzyteczny w 100% to bym sie nie zgodzil, zobaczcie jak wyglada (chodzi o wielkosc, a co za tym idzie roznice w kompilacie) proste "Hello world!" zbudowane przez GCC 3 i GCC 4 i nie chodzi tu o optymalizacje...

Poza tym mialem przyjemnosc podyskutowac z developerem Gentoo, a mial on na temat stabilnosci GCC 4 inne zdanie niz gajownik, ale mniejsza o to.

 

@ gajopwnik, wielkie dzieki za te materialy bo mi pomogly, ale gdyby ktos jeszcze cos dorzucil to bym sie nie gniewal  :P

A moim zdaniem to tylko czyste gderanie ludzi, którzy muszą znowu czytać dokumentację, bo zmieniły się standardy implementacji funkcji i klas szablonowych, obsługi sytuacji wyjątkowych i wielu innych rzeczy. To dobrze, że gcc zmierza do zgodności ze standardem Ansi C++. Zawsze da się to wszystko teleportować na wyższą wersję. To oczywiście problem, ale spróbujcie coś takiego zrobić z kodem z Borland C++ Buildera. A tak na boku. Jeśli nie odkrywa się nowych błędów, nie robi nowych wersji to znaczy że język programowania jest stary i czas na przesiadkę na coś nowszego i wygodniejszego :-)

A tak (_wogóle_ → w ogóle) ORT na marginesie. Teleportowanie kodu procedur numerycznych do M$ to nie najlepszy pomysł. Numerycznie dla mnie ten system jest do bani. Udało mi sie napisać wiele programów z procedurami numerycznymi, ale niewiele uruchomić pod MS Pod *nix'ami to chodzi ładnie i na dodatek da się tuningować.

Odnośnik do komentarza
Udostępnij na innych stronach

Racja w kwestii C++ nowe gcc jest bardziej radykalne, ale nie podjeto wiekszych krokow w zwiazku ze starym dobrym C. Ogolnie zgadzam sie z moim przedmuwcaprzedmówcą i chcialem zauwacycx jedna ciekawa rzecz, mianbowicie zaczalem portowac moja aplikacje z kodu generowanego przez Glade na obsluge poprzez Libglade. I podczas przepisywania programu - a juz spora czesc dziala na Libglade - nie mam klopotow z kompilatami wypluwanymi przez gcc4.

 

Stad konkluzja - czyzby kod generowany przez Glade byl nie kompatybilny z GCC4?

Odnośnik do komentarza
Udostępnij na innych stronach

Racja w kwestii C++ nowe gcc jest bardziej radykalne

GCC 3.4 bardziej podniosło poprzeczkę ;-) http://www.redhat.com/archives/fedora-deve...e/msg01260.html

ale nie podjeto wiekszych krokow w zwiazku ze starym dobrym C.

Gdyby robili większe zmiany, to ludzie jeszcze bardziej by psioczyli. W GCC 4 największą chyba zmianą było włączenie tree-ssa. Dopiero teraz zacznie się cała zabawa w optymalizację wynikowego kodu :] Wspomniana funkcja pozwoliła choćby na łatwiejsze zaimplementowanie Stack Smashing Protection → http://gcc.gnu.org/ml/gcc-patches/2005-05/...5/msg01193.html Dzięki deweloperom RedHata Fedora będzie jeszcze bardziej bezpieczna :] Efekty już widać → https://bugzilla.redhat.com/bugzilla/show_b...gi?id=166626#c6

 

A wracając do kompilacji C i zgłaszanych błędów, to choćby takie rzeczy zostały zabronione → http://gcc.gnu.org/ml/gcc/2005-02/msg00054.html lub lepiej informuje się teraz o operacjach na liczbach ze znakiem/bez znaku. Te ostrzeżenia moga wydawać się błahe, ale prawda jest inna. Warto zapoznać się z tym artykułem → http://www.theepochtimes.com/news/5-7-5/30084.html

Stad konkluzja - czyzby kod generowany przez Glade byl nie kompatybilny z GCC4?

Być może. Warto by było sprawdzić wersję rozwojową lub poszukać na listach malingowych projektu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...