The code after compilation but before linking

Most C compilers generate object code (processor dependent machine code) directly. It is also possible to first generate assembler code and have the assembler generate the object code. Tools like "nm" let you view the contents of an object file.

nm myCfile.o
00000000 b .bss
00000000 d .data
00000000 t .text
         U ___main
         U __alloca
00000012 T _main
00000000 D _myArray
         U _myFunction
00000064 D _myString

Note the three memory segments of a program: text, data, bss (heap is dynamically allocated during runtime). This object file is not yet executable because of the "U" parts: These are undefined external refernces. One is pretty clear: the function myFunction() has been used in myCfile.c but the code is not there. It must be in a library. It is in the next step - linking - that those unresolved externals are found and resolved. Java does this automatically at program start via the classloader. So all Java classes are in this senses "unfinished" what you will soon learn when external classes are not in the classpath and cannot be found at runtime, causing a ClassNotFoundException to be thrown.