KWALIFIKACJA INF2 + INF3 - CZERWIEC 2011

PYTANIE NR 27.
Program tłumaczący kod źródłowy na instrukcje maszynowe umieszczane w pliku pośrednim OBJ, to
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
"Kompilator" tłumaczy kod źródłowy na kod wynikowy na etapie kompilacji, zwykle tworząc plik obiektowy (np. OBJ/.o).
"Linker/konsolidator" łączy wiele plików obiektowych i bibliotek w program, a "debugger" służy do uruchamiania i analizy działania, nie do tłumaczenia kodu.

Pełne wyjaśnienie:

Kompilator to program, którego zadaniem jest przetworzenie kodu źródłowego (np. C/C++/Pascal) do postaci wynikowej. W typowym łańcuchu budowania efektem kompilacji jest plik obiektowy (często z rozszerzeniem .obj w środowiskach Windows lub .o w systemach uniksowych). Taki plik zawiera kod maszynowy lub kod bliski maszynowemu oraz informacje potrzebne do późniejszego łączenia (np. symbole i relokacje).

Odpowiedź "kompilator." pasuje do opisu, bo to właśnie kompilator wykonuje tłumaczenie z poziomu języka wysokiego na postać, którą komputer może dalej przetwarzać w procesie budowania.

Pozostałe odpowiedzi dotyczą innych etapów lub innych zastosowań:

  • "konsolidator." – w praktyce oznacza narzędzie do konsolidacji/łączenia modułów; nie tłumaczy kodu źródłowego, tylko spaja wyniki wcześniejszych kompilacji.
  • "linker." – linker (konsolidator) łączy pliki obiektowe oraz biblioteki, rozwiązuje odwołania do symboli i tworzy plik wykonywalny lub bibliotekę. Nie jest narzędziem tłumaczącym źródła na instrukcje.
  • "debugger." – debugger służy do diagnozowania działania programu: zatrzymywania na breakpointach, podglądu zmiennych, analizy stosu wywołań. Nie tworzy plików OBJ jako produktu tłumaczenia.

Warto pamiętać o typowej kolejności: pliki źródłowe → (kompilator) pliki obiektowe → (linker/konsolidator) program. To rozróżnienie często pojawia się w zadaniach egzaminacyjnych.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Plik OBJ to plik obiektowy powstający po kompilacji pojedynczego modułu. Zawiera kod wynikowy oraz informacje dla linkera (np. symbole). Nie jest zwykle gotowym programem do uruchomienia, tylko elementem, z którego dopiero buduje się plik wykonywalny.
Kompilator tłumaczy kod źródłowy na kod wynikowy (najczęściej do plików obiektowych) i sprawdza poprawność składni oraz typów. To etap przed linkowaniem, czyli przed zbudowaniem finalnego programu lub biblioteki.
Linker nie tłumaczy języka programowania. Jego zadaniem jest połączyć wiele plików obiektowych i bibliotek w jeden wynik (np. EXE/DLL), rozwiązać odwołania do funkcji i danych oraz wykonać operacje związane z adresowaniem/relokacją.
Debugger służy do analizy działania już skompilowanego programu: zatrzymuje wykonanie, pozwala śledzić zmienne i stos. Nie jest narzędziem do tłumaczenia kodu źródłowego, więc typowo nie generuje plików obiektowych jako wyniku pracy.
W uproszczeniu: kompilacja przekształca kod źródłowy do niższego poziomu, asemblacja tworzy kod maszynowy w pliku obiektowym, a linkowanie łączy wiele takich plików z bibliotekami. W praktyce kompilator często uruchamia te kroki automatycznie w jednym poleceniu.
Plik OBJ powstaje, gdy kompilujesz moduł "do obiektu" (bez budowania całego programu). Plik EXE zwykle powstaje dopiero po etapie linkowania, gdy wszystkie wymagane moduły i biblioteki zostaną połączone w kompletną aplikację.
Często mylone są błędy linkowania (np. brak definicji funkcji) z błędami kompilacji (składnia/typy). Pomaga zasada: kompilator pracuje na pojedynczych plikach źródłowych, a linker "składa całość" i wtedy wychodzą braki w połączeniach.
Zależy od formatu i narzędzi, ale typowy plik obiektowy zawiera kod w postaci wynikowej dla danej architektury oraz metadane potrzebne do łączenia. Nie jest jednak "samodzielnym" programem, bo może mieć nierozwiązane odwołania do innych modułów.
Jeśli komunikaty dotyczą składni, typów, brakujących nagłówków lub niepoprawnych deklaracji, to zwykle etap kompilacji. Jeśli pojawiają się informacje o "niezdefiniowanych symbolach" lub brakujących bibliotekach, to najczęściej etap linkowania (konsolidacji).
Warto umieć opisać cały łańcuch: źródła → pliki obiektowe → program, oraz znać typowe produkty (OBJ/.o, EXE, DLL) i role narzędzi. Dobrą metodą jest praktyka w IDE lub w konsoli: osobno kompilacja do obiektu i osobno linkowanie.
info

Statystycznie 67% uczniów zna prawidłową odpowiedź. średnie

Specjaliści zwracają uwagę: ""Kompilator" tłumaczy kod źródłowy na kod wynikowy na etapie kompilacji, zwykle tworząc plik obiektowy (np. OBJ/.o)."

Źródła:

  • Microsoft Learn: ".obj Files" (MSVC) – opis plików obiektowych i roli kompilatora/linkera, https://learn.microsoft.com/en-us/cpp/build/reference/obj-files (dostęp: 2026-03-02)
  • GNU GCC Manual: "Overall Options" / opis etapów kompilacji i plików pośrednich (-c, output .o), https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html (dostęp: 2026-03-02)
  • LLVM Clang Documentation: "Clang Command Line Reference" / -c i generowanie plików obiektowych, https://clang.llvm.org/docs/ClangCommandLineReference.html (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja kompilatora używanego na zajęciach (np. GCC/Clang lub MSVC) – sekcje o plikach obiektowych
  • Materiały o procesie: preprocessing → compilation → assembly → linking
  • Kurs podstaw budowania programów (make/CMake) i pojęcia: object file, static/dynamic library

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego