Chapter 5 155
Creating and Using Libraries
Version Control with Shared Libraries
• “Shared Library Dependencies and Version Control”
• “Adding New Versions to a Shared Library”
• “Specifying a Version Date”
The Version Number Compiler Directive
With intra-library versioning, you assign a version number to any
module in a shared library. The version number applies to all global
symbols defined in the module's source file. The version number is a date,
specified with a compiler directive in the source file. The syntax of the
version number directive depends on the language:
C and C++: #pragma HP_SHLIB_VERSION "date"
FORTRAN: $SHLIB_VERSION 'date'
Pascal: $SHLIB_VERSION 'date'$
The date argument in all three directives is of the form month/year. The
month must be 1 through 12, corresponding to January through
December. The year can be specified as either the last two digits of the
year (94 for 1994) or a full year specification (1994). Two-digit year codes
from 00 through 40 represent the years 2000 through 2040.
This directive should only be used if incompatible changes are made to a
source file. If a version number directive is not present in a source file,
the version number of all symbols defined in the object module defaults
to 1/90.
Shared Library Dependencies and Version Control
A shared library as a whole can be thought of as having a version
number itself. This version number is the most recent of the versioned
symbols in the library and any dependent libraries.
When a shared library is built with a dependent shared library, the
version number of the dependent library used during the link is recorded
with the dependency.
When shl_load(3X) is called to load a shared library, the latest version of
the library is loaded. If that library has dependencies, the dynamic
loader (dld.sl(5)) will load the versions of the dependent libraries that
were recorded in the dependency list. Note that these are not necessarily
the most recent versions of the dependent libraries. When dld.sl loads
a particular version of a shared library, it will load the same version of
any dependent libraries.