Just man gcc
Code:
-nostartfiles
Do not use the standard system startup files when linking. The
standard system libraries are used normally, unless -nostdlib or
-nodefaultlibs is used.
-nodefaultlibs
Do not use the standard system libraries when linking. Only the
libraries you specify will be passed to the linker. The standard
startup files are used normally, unless -nostartfiles is used. The
compiler may generate calls to memcmp, memset, and memcpy for Sys-
tem V (and ISO C) environments or to bcopy and bzero for BSD envi-
ronments. These entries are usually resolved by entries in libc.
These entry points should be supplied through some other mechanism
when this option is specified.
-nostdlib
Do not use the standard system startup files or libraries when
linking. No startup files and only the libraries you specify will
be passed to the linker. The compiler may generate calls to mem-
cmp, memset, and memcpy for System V (and ISO C) environments or to
bcopy and bzero for BSD environments. These entries are usually
resolved by entries in libc. These entry points should be supplied
through some other mechanism when this option is specified.
One of the standard libraries bypassed by -nostdlib and -nodefault-
libs is libgcc.a, a library of internal subroutines that GCC uses
to overcome shortcomings of particular machines, or special needs
for some languages.
In most cases, you need libgcc.a even when you want to avoid other
standard libraries. In other words, when you specify -nostdlib or
-nodefaultlibs you should usually specify -lgcc as well. This
ensures that you have no unresolved references to internal GCC
library subroutines. (For example, __main, used to ensure C++ con-
structors will be called.)