Jak nazywa się program, który łączy skompilowane moduły programu i potrzebne biblioteki w jeden plik wykonywalny?
A. Konsolidator (linker).
B. Edytor kodu źródłowego.
C. Interpreter.
D. Debugger.
Konsolidator, czyli linker, to narzędzie uruchamiane zwykle po kompilatorze. Jego zadanie polega na połączeniu skompilowanych modułów programu, czyli plików obiektowych typu .o albo .obj, z bibliotekami potrzebnymi do działania aplikacji. Linker rozwiązuje odwołania do funkcji i zmiennych z innych modułów, ustala adresy symboli i przygotowuje plik wykonywalny, na przykład .exe w Windows albo plik ELF w Linuksie. W praktyce widać to choćby przy kompilacji programu w C lub C++: kompilator tłumaczy każdy plik źródłowy osobno, a dopiero konsolidator składa całość w jeden program. Moim zdaniem to jeden z tych etapów, którego na początku nauki prawie nie widać, bo IDE robi to automatycznie, ale jak pojawia się błąd unresolved external symbol albo undefined reference, od razu wiadomo, że problem dotyczy właśnie linkowania. Dobrą praktyką branżową jest rozdzielanie kodu na moduły i biblioteki, bo ułatwia to utrzymanie projektu, testowanie oraz ponowne użycie kodu. Linker może też korzystać z bibliotek statycznych, włączanych do programu, albo dynamicznych, ładowanych w czasie uruchamiania, jak .dll lub .so.
W tym pytaniu łatwo pomylić kilka narzędzi używanych podczas tworzenia programu, bo wszystkie mogą występować w jednym środowisku programistycznym. Debugger służy do uruchamiania programu krok po kroku, podglądania wartości zmiennych, ustawiania punktów przerwania i szukania błędów logicznych lub problemów z pamięcią. Nie tworzy on jednak pliku wykonywalnego z modułów i bibliotek. Z mojego doświadczenia uczniowie czasem wybierają debugger dlatego, że kojarzy się z końcowym testowaniem programu, ale to już etap po zbudowaniu aplikacji, a nie samo składanie jej w całość. Edytor kodu źródłowego jest jeszcze wcześniejszym elementem pracy. Pozwala pisać i modyfikować pliki źródłowe, czasem podpowiada składnię, formatuje kod i integruje się z systemem budowania, ale sam z siebie nie konsoliduje plików obiektowych. Interpreter też nie pasuje do opisu, ponieważ wykonuje kod bez klasycznego etapu tworzenia jednego pliku wykonywalnego, jak ma to miejsce w wielu językach skryptowych. Owszem, istnieją różne mechanizmy uruchamiania i pakowania aplikacji, ale typowe linkowanie dotyczy programów kompilowanych. Program, który łączy skompilowane moduły oraz potrzebne biblioteki, to konsolidator, czyli linker. To on rozwiązuje symbole, dołącza biblioteki i przygotowuje wynik gotowy do uruchomienia przez system operacyjny.