ELF defines the following distinct classes of object files:
- A relocatable file holds code and data suitable for static linking with other object files to create an executable or shared object file.
- An executable file holds a program suitable for execution. It may or may not have dynamic linking information.
- A shared object file is a constituent portion of a program that can be combined with an executable and other shared objects at load time to form a process image. Shared objects always contain dynamic linking information. To avoid confusion with relocatable object files, we sometimes use the term shared library to refer to shared objects.
- A relocatable module. A relocatable module is a shared object file that also contains static linking information: that is, a static symbol table, section table, and static relocation entries. It is intended for ROMable libraries that can be either statically or dynamically linked.
This specification uses the terms static link unit and load module interchangeably to refer to executables and shared libraries (including relocatable modules).