Previous: The assembler, Up: How the compiler works


12.5 The linker

The final stage of compilation is the linking of object files to create an executable. In practice, an executable requires many external functions from system and C run-time (crt) libraries. Consequently, the actual link commands used internally by GCC are complicated. For example, the full command for linking the Hello World program is:

     $ ld -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o
      /usr/lib/crti.o /usr/lib/gcc-lib/i686/3.3.1/crtbegin.o
      -L/usr/lib/gcc-lib/i686/3.3.1 hello.o -lgcc -lgcc_eh
      -lc -lgcc -lgcc_eh /usr/lib/gcc-lib/i686/3.3.1/crtend.o
      /usr/lib/crtn.o

Fortunately there is never any need to type the command above directly—the entire linking process is handled transparently by gcc when invoked as follows:

     $ gcc hello.o

This links the object file hello.o to the C standard library, and produces an executable file a.out:

     $ ./a.out
     Hello, world!

An object file for a C++ program can be linked to the C++ standard library in the same way with a single g++ command.