Modul obiect (de asemenea - fișier obiect , fișier obiect în engleză ) - un fișier cu o reprezentare intermediară a unui modul de program separat, obținut ca urmare a procesării codului sursă de către compilator . Un fișier obiect conține cod special pregătit (numit adesea binar sau binar ) care poate fi combinat cu alte fișiere obiect folosind un linker ( linker ) pentru a obține un modul executabil sau o bibliotecă gata făcută.
Fișierele obiect sunt blocuri de cod de mașină și date cu adrese nedefinite de referințe la date și proceduri din alte module obiect, precum și o listă a procedurilor și datelor acestora. Linker-ul asamblează codul și datele fiecărui modul obiect într-un program final și calculează și populează adresele de referință încrucișată între module. Legătura cu bibliotecile statice se face de către linker sau linker (care poate fi un program autonom sau parte a compilatorului), în timp ce legătura cu sistemul de operare și bibliotecile dinamice se face în timpul execuției, după ce programul este încărcat în memorie.
Programatorul generează cod obiect folosind un compilator sau un asamblator. De exemplu, pe Linux, compilatorul GNU Compiler Collection va genera fișiere .o care utilizează formatul ELF. Compilarea pe Windows produce fișiere .obj folosind formatul COFF. Linker-ul este apoi folosit pentru a combina codul obiect într-un singur program executabil sau bibliotecă, extragând biblioteci de sistem precompilate după cum este necesar.
Există multe formate diferite de fișiere obiect; inițial fiecare tip de computer avea propriul său format unic, dar odată cu apariția Unix și a altor sisteme de operare portabile, unele formate precum ELF și COFF au fost definite și utilizate pe diferite tipuri de sisteme. Același format poate fi utilizat atât pentru intrarea, cât și pentru ieșirea linkerului și, prin urmare, pentru formatul bibliotecii și al executabilului. Unele formate pot conține cod de mașină pentru diferite procesoare, cu varianta corectă aleasă de sistemul de operare atunci când programul este încărcat [1] .