Co to jest plik obiektowy?

Plik obiektowy to plik komputerowy wygenerowany przez program zwany kompilatorem i zawierający dane oraz instrukcje. Kompilatory tłumaczą kod źródłowy języka programowania na pośrednią formę do odczytu maszynowego, znaną jako kod obiektowy. Mniejsze programy mogą być kompilowane w pojedynczym pliku obiektowym, podczas gdy większe programy są zazwyczaj kompilowane w kilka plików o pokrewnych funkcjach. Te pojedyncze pliki obiektowe są łączone za pomocą konsolidatora, a informacje specyficzne dla systemu operacyjnego są dodawane w celu utworzenia programu wykonywalnego.

W powszechnej praktyce plik obiektowy jest oznaczony rozszerzeniem „.obj”. Istnieje jednak kilka różnych formatów tych plików. Najpopularniejszymi są formaty Intel® Relocatable Object Module Format (OMF) i Common Object File Format (COFF) systemów Windows® i UNIX® System V. W wielu systemach INIX® format Executable and Linkable Format (ELF) zyskał popularność wymienić COFF.

Niezależnie od formatu, plik obiektowy zazwyczaj zawiera trzy typy informacji, które pozwalają mu na interakcję z innymi modułami programu. Procedury i dane, które są dostępne z zewnątrz, mają przypisane nazwy, za pomocą których można je wywoływać z innych modułów. Podobnie, odniesienia do informacji poza modułem są odnotowywane, ale nie mają przypisanej nazwy. Kiedy pliki są połączone, nienazwane odnośniki otrzymają nazwę nadaną im w module, w którym zostały pierwotnie zdefiniowane. Nazwy lokalne są używane dla instrukcji i danych, do których odwołuje się wyłącznie moduł.

Nie cały kod, który można połączyć, jest przechowywany jako pliki obiektowe. Biblioteki to kolekcje prekompilowanych procedur, które są przechowywane jako kod wynikowy. Są one tworzone w podobny sposób jak pliki obiektowe i są przydatne do przechowywania często wywoływanych procedur. Gdy linker nie znajdzie odniesienia w innych plikach obiektowych, automatycznie wyszuka je w pliku biblioteki. Większość implementacji języka programowania zawiera standardową bibliotekę funkcji.

Dzięki dynamicznemu łączeniu plik obiektowy może być jednocześnie używany przez wiele programów wykonawczych. Zamiast wiązania kodu obiektu z programem podczas łączenia, jest on pobierany podczas ładowania programu lub w czasie wykonywania, gdy odwołuje się do procedury. W środowisku Windows® są one znane jako biblioteki dołączane dynamicznie i są oznaczone rozszerzeniem „.dll”. Systemy podobne do Unixa często nazywają ten typ pliku dynamicznym obiektem współdzielonym (DSO). Ten typ pliku obiektowego może być również zaimplementowany do użytku z określonym programem i byłby częścią instalacji tego programu.