Any program that consists of more than one source module must be linked. It is fundamentally impossible to exclude this step unlees the program consists of a single source module with no external references. Many C++ programmers will arrange to have a separate C++ and header file for each class, which will result in the compiler generating a separate object file for each class.. A linking process is therefore necessary to combine these object files into a functional program, irrespective of any external library references (which will normally be required if the program is to do anything useful), and irrespective of whether static or dynamic linking is used for the libraries.