However, since the shared library is now being used by critical components of your system, you can't just replace it with your new and improved shared library. If you've made an error somewhere in your new code, it will affect all those components which at best will render your system unusable. The answer is actually quite simple. By default, shared libraries resolve their symbols at load time, not at link time. The second function also exists inside the coolstuff library, but is generally not called from outside the coolstuff library.
Type make at the command line, and run coolapp.
You'll notice that it takes about 32 seconds to finish. There is a way to speed this up, but we don't want to cause other applications using this shared library to crash. Especially if we have a bug in our new code. Again, re-make, and run coolapp. Such behavior can, however, lead to some unpredictable, and unexpected results, if you don't already know that certain functions exist in a shared library you are using.