To build an executable program in UNIX, you'll need an appropriate crt0.o module. Every UNIX environment provides a system loader. This loader usually consists of a section of executable code in the OS kernel referenced with one of the exec() system calls, and a special link module called crt0.o (the name varies with the operating system and compiler). Almost all executable UNIX programs must include the crt0.o module to support the operation of this system loader.
The crt0.o link module tells UNIX how to "enter" your C program. It provides a special state initialization routine called "start" or "_start" which handles a number of system and language dependent initializations for your load module. It then calls the "_main" symbol, initiating program control of the thread or process.