An object file is the real output from the compilation phase.
An object file is the real output from the compilation phase. It's mostly machine code, but has info that allows a linker to see what symbols are in it as well as symbols it requires in order to work. (For reference, "symbols" are basically names of global objects, functions, etc.)
A linker takes all these object files and combines them to form one executable (assuming that it can, ie: that there aren't any duplicate or undefined symbols).  A lot of compilers will do this for you (read: they run the linker on their own) if you don't tell them to "just compile" using command-line options.  (-c is a common "just compile; don't link" option.)
 
     
     
     
     
     
     
     
     
     
     
     
     
     
    