Driving the linker directly sucks, there is too much to get right.
If you really want to know, just compile a small program with the -v option, and see how complex a linker command line can be.
This works just fine here
Code:
$ gcc generic.c && ls -l a.out && file a.out
-rwxrwxr-x 11586 Nov 30 19:28 a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
$ gcc generic.c -static && ls -l a.out && file a.out
-rwxrwxr-x 447193 Nov 30 19:28 a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
Obvious to tell that it's statically linked by the sudden jump in the size of the program executable.