Relocatable compilation output
GCC’s -c option produces object files without linking, whereas -S stops at assembly output. The familiar .o suffix is a convention, not a complete description of the file’s format or architecture.
An object can contain machine instructions while still requiring addresses to be resolved. Linking combines definitions, references and layout rather than merely translating instructions that were absent.
Records beyond instructions
An ELF header identifies properties such as file type and architecture, while section records describe its parts. Symbols describe definitions and references; relocation records identify locations to adjust and the relevant operation and symbol.
Code, initialized data, uninitialized storage and debugging information can be described separately. A .bss section represents storage needs without storing every future zero byte in the file.
References: [2]
Object modules and images
Windows distinguishes COFF object modules from PE program images. Object modules contain a COFF header, sections, raw contents and relocation information; images add structures needed for loading.
Objects, shared libraries and executables may belong to a format family while serving different purposes. Matching processor instructions alone does not ensure compatibility across formats and binary interfaces.
References: [3]