Symbol versioning records extra information about symbols imported from, and exported by, a dynamic shared object. The dynamic loader uses this extra information to ensure that all the symbols required by an image are available at load time.
Symbol versioning enables shared object creators to produce new versions of symbols for use by all new clients, while maintaining compatibility with clients linked against old versions of the shared object.
Symbol versioning adds the concept of a version to the dynamic symbol table. A version is a name that symbols are associated with. When a dynamic loader tries to resolve a symbol reference associated with a version name, it can only match against a symbol definition with the same version name.
A version might be associated with previous version names to show the revision history of the shared object.
While a shared object might have multiple versions of the same symbol, a client of the shared object can only bind against the latest version.
This is called the default version of the symbol.
By default, the linker does not create versioned symbols for a non Base Platform Application Binary Interface (BPABI) shared object.