The next thing that happens as your computer starts up is that init is loaded and run. However, init, like almost all programs, uses functions from libraries.
You may have seen an example C program like this:
main() {
printf("Hello World!\n");
}
The program contains no definition of printf, so
where does it come from? It comes from the standard C libraries,
on a GNU/Linux system, glibc. If you compile it under Visual C++,
then it comes from a Microsoft implementation of the same
standard functions. There are zillions of these standard
functions, for math, string, dates/times memory allocation and so
on. Everything in Unix (including Linux) is either written in C
or has to try hard to pretend it is, so everything uses these
functions.
If you look in /lib on your linux system you will
see lots of files called libsomething.so or
libsomething.a etc. They are libraries of these
functions. Glibc is just the GNU implementation of these
functions.
There are two ways programs can use these library functions. If
you statically link a program, these library functions
are copied into the executable that gets created. This is what
the libsomething.a libraries are for. If you
dynamically link a program (and this is the default),
then when the program is running and needs the library code, it
is called from the libsomething.so file.
The command ldd is your friend when you want to work
out which libraries are needed by a particular program. For
example, here are the libraries that bash uses:
[greg@Curry power2bash]$ ldd /bin/bash
libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
libc.so.6 => /lib/libc.so.6 (0x4001d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Some of the functions in the libraries depend on where you are.
For example, in Australia we write dates as dd/mm/yy, but
Americans write mm/dd/yy. There is a program that comes with the
glibc distribution called localedef
which enables you to set this up.
Use ldd to find out what libraries your favourite
applications use.
Use ldd to find out what libraries init
uses.
Make a toy library, with just one or two functions in it. The
program ar is used to create them, the man page for
ar might be a good place to start investigating how
this is done. Write, compile and link a program that uses this
library.