• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Długa kompilacja w Code::Blocks

Object Storage Arubacloud
0 głosów
1,508 wizyt
pytanie zadane 28 października 2015 w C i C++ przez p(sychi)atryk Obywatel (1,110 p.)
zamknięte 28 października 2015 przez p(sychi)atryk
Witam! Podobny temat się już pojawił, ale nie odnalazłem w nim odpowiedzi. Otóż programy w Code::Blocks kompilują mi się około 17 sekund i nie są to projekty Cry Engine 3, tylko zwykłe "Hello world". Gdy problem się pojawił było to około 8 sekund, ale jak widać mój komputer mnie nie oszczędza. Pracuję w tym momencie na Windowsie 10 i procesorze Intel Core i5-2500K. Wcześniej programy kompilowały się maksymalnie 3 sekundy. Macie jakieś sugestie?
komentarz zamknięcia: Problem został rozwiązany

3 odpowiedzi

+3 głosów
odpowiedź 28 października 2015 przez adrian17 Ekspert (344,860 p.)
Wyrzuć wszystkie biblioteki i zminimalizuj kod do "int main(){return 0;}", wtedy zmierz jeszcze raz. Słyszałem parę razy jak taki problem był spowodowany antywirusem, spróbuj go wyłączyć na chwilę i ponownie zmierzyć.
komentarz 28 października 2015 przez p(sychi)atryk Obywatel (1,110 p.)
Mamy rozwiązanie. Antywirus! Wystarczyło wyłączyć osłony. Dziękuję bardzo za pomoc!
0 głosów
odpowiedź 28 października 2015 przez Damian11131 Stary wyjadacz (13,490 p.)
Ja mam czasami podobną sytuację, mam Windowsa 7. Co prawda występuje rzadko, no ale jednak...
komentarz 28 października 2015 przez p(sychi)atryk Obywatel (1,110 p.)
Ja mam ten problem niestety przy każdej kompilacji.
0 głosów
odpowiedź 28 października 2015 przez Radfler VIP (101,030 p.)
Ogólnie kompilacja C++ jest długa. Jeżeli Tobie się wydaje, że "Hello world!" to mało, to trochę się mylisz. Poza Twoim plikiem, na kompilację czeka kilka(dziesiąt) innych. Do tego dochodzi linkowanie i inne rzeczy. Tu masz to lepiej wyjaśnione (po angielsku): http://stackoverflow.com/questions/318398/why-does-c-compilation-take-so-long.
komentarz 28 października 2015 przez adrian17 Ekspert (344,860 p.)
To nie zmienia faktu, że hello world nigdy nie powinien się kompilować dłużej niż ułamek sekundy.
komentarz 28 października 2015 przez p(sychi)atryk Obywatel (1,110 p.)
Tylko dlaczego nagle z 1-3 sekund zrobiło się 17? Nawet jak plik skompiluję, a potem uruchomię trwa to odrobinę dużej niż jeszcze jakieś 2 tygodnie temu.
komentarz 28 października 2015 przez draghan VIP (106,230 p.)

Poza Twoim plikiem, na kompilację czeka kilka(dziesiąt) innych.

Wyjaśnisz, gdzie przy programie typu "Hello world" czai się tych kilka(dziesiąt) innych plików do kompilacji? :)

Wydawało mi się, że proces kompilacji jest dość... leniwy. Nie robi niczego, czego nie musi. Dołączenie standardowych bibliotek nie powoduje ich ponownej kompilacji, tylko włączenie ich już skompilowanej formy do linkowania - tak przynajmniej mi się dotąd wydawało.

Naprawdę byłbym wdzięczny, gdybyś rozjaśnił sprawę. ;)

komentarz 28 października 2015 przez adrian17 Ekspert (344,860 p.)

Dołączenie standardowych bibliotek nie powoduje ich ponownej kompilacji

Tak, ale dużą część biblioteki standardowej, szczególnie części oszablonowanej, stanowią nagłówki.

Spróbuj napisać program hello world, a potem przerzucić go przez sam preprocesor:

g++ main.cpp -E > wynik.txt

U mnie samo #include <iostream> pośrednio dołącza do 26 tysięcy linii, 600kB tekstu. Dodanie <algorithm> powiękza go do 80k linii, 2MB tekstu.

(co nie zmienia faktu że kompilacja takiego programu i tak nie powinna nigdy przekroczyć pół sekundy)

komentarz 28 października 2015 przez draghan VIP (106,230 p.)
I tu trafiłeś, nie pomyślałem o szablonach.

Dzięki! :)
komentarz 28 października 2015 przez Radfler VIP (101,030 p.)
Chociażby <iostream>, <ios>, <iosfwd>, <ostream>, <istream>, <locale>, <string>... można długo wymieniać. No tak dla dużych projektów proces kompilacji jest bardzo leniwy. I z tego co wiem, każdy plik nagłówkowy przechodzi przez proces kompilacji od nowa: http://en.cppreference.com/w/cpp/language/translation_phases (na dzień dzisiejszy opieram się o cppreference). Chyba że kompilujesz kod po bardzo małej zmianie, wówczas proces ten powinien być znacznie szybszy (tak jak napisałeś: nie robi już czegoś, co wcześniej zrobił).

PS. Mam durną tendencję do wyolbrzymiania wielu rzeczy i w tym wypadku @adrian17 miał rację ;)

Podobne pytania

0 głosów
3 odpowiedzi 2,934 wizyt
pytanie zadane 14 października 2015 w C i C++ przez p(sychi)atryk Obywatel (1,110 p.)
0 głosów
0 odpowiedzi 501 wizyt
0 głosów
0 odpowiedzi 820 wizyt
pytanie zadane 20 września 2016 w C i C++ przez drrak Nowicjusz (140 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...