The most difficult issue introduced by shared libraries is that of
creating and resolving runtime dependencies. Dependencies on programs
and libraries are often described in terms of a single name, such as
sed. So, one may say “libtool depends on sed,” and that is
good enough for most purposes.
However, when an interface changes regularly, we need to be more specific: “Gnus 5.1 requires Emacs 19.28 or above.” Here, the description of an interface consists of a name, and a “version number.”
Even that sort of description is not accurate enough for some purposes. What if Emacs 20 changes enough to break Gnus 5.1?
The same problem exists in shared libraries: we require a formal version system to describe the sorts of dependencies that programs have on shared libraries, so that the dynamic linker can guarantee that programs are linked only against libraries that provide the interface they require.
|• Interfaces||What are library interfaces?|
|• Libtool versioning||Libtool’s versioning system.|
|• Updating version info||Changing version information before releases.|
|• Release numbers||Breaking binary compatibility for aesthetics.|