osdev.labedz.org

Opis

Wyraz GCC jest skrótem od 'GNU Compiler Collection' - czyli zestaw kompilatorów powstałych pod licencją GPL. GCC jest więc zintegrowaną dystrybucją kompilatorów kilku najważniejszych języków programowania. W skład GCC obecnie wchodzą kompilatory języków: C, C++, Java, Fortran i Ada.

Jedną z najważniejszych cech GCC jest jego przenośność. W dokumentacji pakietu napisano, że ideą projektantów jest, aby kompilatory GNU uruchamiały się na każdej maszynie w której zmienna typu INT ma przynajmniej 32 bity. Podstawowym założeniem co do architektury na jakim może pracować kompilator jest zastosowanie prostego (nie segmentowego) modelu pamięci dla bloku danych. Kompilator został napisany w języku C, a jego kod nie zawiera procedur, które są charakterystyczne dla jakiejś określonej architektury. Podczas tworzenia środowiska GCC należy jednak ustawić parametry odpowiednie w stosunku do posiadanego procesora (np. konwencja przechowywania danych). W obecnej chwili kompilator GCC dostępny jest dla przeszło trzydziestu różnych platform sprzętowych zaczynając od Intel386, poprzez AMDx86-64, M680x0, Sparc, MIPS, IA-64 i wiele innych. Kompilator GCC nie obsługuje jednak trybu rzeczywistego procesorów Intel386 (lukę tą zapełnia projekt DJGPP).

Dla każdego z języków programowania kompilowanego przez GCC, dla którego istnieje ogólnie przyjęty standard, projekt GCC usiłuje nadążyć za jego rozwojem i zapewnić pełną zgodność, często również udostępniając opcje znacznie go rozszerzające. GCC jest zgodne z trzema wersjami standardu języka C: ANSI C (później ISO/IEC 9899:1990), ISO/IEC 9899:199409 i ISO/IEC 9899:1999. Obsługa standardu wersji najnowszej języka C nie jest jeszcze do końca zaimplementowana.

Wraz z kompilatorami w pakiecie GCC występuje też biblioteka funkcji niskiego poziomu (ang. low-level runtime library). Biblioteka ta zawiera szereg funkcji arytmetycznych, których dany procesor nie może wykonać bezpośrednio. W jej skład wchodzą na przykład. mnożenie i dzielenie liczb całkowitych czy operacje zmiennoprzecinkowe. W skład biblioteki wchodzą też procedury obsługi wyjątków czy też powszechnie stosowane procedury typu memset() czy memcpy().

Proces tworzenia pliku wykonywalnego (programu) przez program gcc składa się zazwyczaj z czterech etapów:

  • przetworzenie pliku źródłowego przez preprocesor języka C
  • właściwej kompilacji (w wyniku której powstaje kod assemblera)
  • assemblacji (tworzenie pliku obiektowego)
  • konsolidacji (łączenie plików obiektowych w plik wykonywalny/bibliotekę)

Zadaniem programu gcc jest wywołanie, w zależności od użytych opcji oraz rodzaju argumentów, w odpowiedniej kolejności i z odpowiednimi argumentami programów: preprocesora, kompilatora, assemblera i konsolidatora.

Opcje - ustawienia

Kompilator GCC uruchamia się z poziomu linii poleceń, wywołując program gcc wraz z potrzebnymi parametrami.

$ gcc [ -c|-S|-E] [-g] [-Opoziom] [-Wostrzeżenia] [-Ikatalog] [-o plik_wyjściowy] plik_wejściowy
-vPowoduje, że gcc wyświetla na ekranie szczegółowe informacje o wywoływanych przez siebie programach, wraz z wszystkimi opcjami i argumentami.
-o plikZmienia domyślną nazwę pliku wynikowego.
-WallWłącza wyświetlanie na ekranie wszystkich najważniejszych ostrzeżeń kompilatora.
-gPowoduje, że plik wynikowy zawiera informacje dla programu śledzącego (debuggera).
-IkatalogDodaje katalog do listy katalogów zawierających pliki nagłówkowe. Katalog określony przez opcję zostaje przeszukany jako pierwszy.
-b typWybór architektury komputera.
-nostdincPowoduje, że kompilator nie szuka plików nagłówkowych w standardowych katalogach systemowych. Przeszukiwane są tylko katalogi określone przez parametr -I.
-fno-builtinPowoduje, że kompilator nie generuje kodu dla typowych procedur (memcpy()) wg. zawartych w nim schematów.
-SPowoduje, że kompilator nie przeprowadza assemblacji po skompilowaniu programów. Na wyjściu mamy plik z kodem źródłowym assemblera.
-cPowoduje, że kompilator nie przeprowadza konsolidacji programów. Na wyjściu dostajemy plik obiektowy.
-O poziomWybór poziomu optymalizacji kodu. Poziom zawiera się w przedziale <0, 3>.
Tabela: Typowe opcje kompilatora GCC