ch 41: no soname

If you create a shared object and don't provide a soname, the object's name
becomes the soname. If the object's name contains specific version information
then whatever needs this object can only ever link to this object's specific
name as it existed when the compile was performed.

In other words, the flexibility of being able to upgrade minor versions of an
object is lost.

For example, if you create an object called libnsn.so.2.0.6, it does not
contain a soname, and link an application to it, the application's NEEDED
section will specifically list libnsn.so.2.0.6 which means future (or older)
version 2's of libnsn will not be sufficient to allow the application to run;
the application will only ever run with libnsn.so.2.0.6.