The c library, through its system call wrappers and other functions act as a front end to many functions that reside in the kernel. Most executables, for a number of reasons, are linked dynamically. That is to say, functionality in the common libraries such as libc aren't compiled in to the executables. That functionality is rather referred to shared libraries present in a system. These libraries, called shared libraries, are common to most incarnations of the operating systems.
Shared libraries are also often available as separate pieces of software.
It is responsible for the determination of which shared libraries are needed as well as the loading of those libraries and referencing them to virtual addresses addresseable by the executable itself. This way, one can build more compact executables, and equally importantly, one can the functions provided by these libraries as up to date as possible without having to recompile every executable on a system. This is particularly important for security reasons, for example if a security hole is fixed in a library, a simple fix to the library is sufficient, whereas if all executables where statically linked, one would have to recompile everything in a system before the fix has completely propagated. If they were statically linked, the functionality formely provided by the shared library would be loaded in memory by each executable image. Although shared libraries present many advantages, they also have their disadvantages.