372 Poznaj Linux
Powyższe polecenie spowoduje utworzenie wykonywalnego pliku o nazwie cr.azwa programu> dla kodu zapisanego w pliku <jjlik>. Pliki źródłowe dla gcc zazwyczaj posiadają rozszerzenie .c. Jeśli nie podamy nazwy pliku wynikowego, gcc utworzy plik o nazwie a .out.
Domyślnie gcc nie korzysta ze swojego optymalizatora kodu. Jeśli chcemy wymusić jego użycie, musimy dodać do nazwy kompilatora opcję -07, która każe gcc zrobić wszystko co w jego mocy, aby zwiększyć wydajność programu. Należy zwrócić uwagę, że przy włączonej opcji optymalizacji, gcc ma trudności z wygenerowaniem informacji dla debuggera. O ile nie mamy dużego doświadczenia w obsłudze narzędzi GNU i debugge-rów. próba usuwania błędów ze zoptymalizowanego kodu może zakończyć się frustrującą porażką. Aby nakazać kompilatorowi wygenerowanie kodu dla profilcra, należy dołączyć do jego wywołania opcję -pg.
Programy pisane w C są często modularne, co oznacza że składa się na nie więcej niż jeden plik. W celu wygenerowania pliku wykonywalnego, wszystkie moduły należy ze sobą połączyć. Zajmuje się tym konsolidator. Kompilator gcc potrafi, co prawda, jednocześnie skompilować kilka różnych plików, ale za cenę wpisywania długich i skomplikowanych poleceń. Dlatego też tworzy się pliki Ma'<efile, nakazujące kompilatorowi przetworzyć pliki wejściowe jeden po drugim, a następnie łączące je w jedną całość za pomocą konsolidatora id. gcc udostępnia w tym celu specjalną opcję: -c. Przykładowo, aby wygenerować plik moduł.o (wykorzystywany później przez konsolidator) z pliku moduł.c, należy wpisać:
gcc -c moduł.c
gcc automatycznie utworzy plik moduł.o.
Linux ohsługuje również dynamiczne łączeuie
Dynamiczne łączenie ogranicza ilość pamięci zajmowanej przez program. Przykład: wiele programów korzysta z zestawu standardowych funkcji służących do wyświetlania tekstu na ekranie. Umieszczenie owych funkcji w jednej bibliotece, dostępnej dla każdego programu, usuwa potrzebę wkompilowywania ich w każdy program. To samo spostrzeżenie stoi za wykorzystaniem plików .dii w systemach Windows i OS/2. Niestety, różnice w wersjach bibliotek dynamicznych mogą uniemożliwić działanie niektórych programów. Dlatego też podczas kompilowania programu programista ma możliwość statycznego dołączenia wykorzystywanych bibliotek do kodu wykonywalnego. Uzyskujemy w ten sposób większą stabilność za cenę większego zużycia pamięci.