HP-UX Linker and Libraries User's Guide

differences exist between these toolsets. The IPF linker toolset introduces different types of shared
libraries. (In SVR4 Unix, shared libraries are sometimes called dlls.)
Compatibility mode shared library:
Using the IPF linker, a compatibility mode shared library is basically a library built with ld
-b +compat that has dependent shared libraries. The +compat option affects the way the
linker and loader search for dependent libraries of a shared library and records their names.
Standard mode shared library:
A standard mode shared library is a library built with ld-b or ld -b +std with dependent
shared libraries.
NOTE: If you specify ld -b +compat with no dependent libraries, you must create a
shared library that has no mode - neither compatibility mode nor standard mode.
The linker handles these libraries in different way with regard to internal naming and library search
modes.
Internal Name Processing
For both PA-32 mode and IPF/PA-64 mode, you must specify shared library internal names using
ld +h name However, their dependent libraries' internal names may not be recorded the same
way in a standard mode link.
The linker treats shared library names as follows:
If the dependent shared library has an internal name, it is recorded in the DT_NEEDED entry.
If the dependent shared library is specified with the -l or -l: option, only the libname.ext
is recorded in the DT_NEEDED entry.
The path of the dependent shared library as seen on the link line is recorded in the DT_NEEDED
entry.
All DT_NEEDED entries with no "/" in the libname are subject to dynamic path lookup.
In an ld +compat compatibility-mode link, the linker treats the internal names like it does in PA-32
mode:
If the dependent library's internal name is rooted (starts with "/"), it is inserted as is in the
DT_HP_NEEDED entry. If it was specified with -l, the dynamic path bit is set to TRUE in the
DT_HP_NEEDED entry.
If the dependent library's internal name contains a relative path, the internal name is inserted
at the end of the path where the shared library is found at link time, replacing the library's
filename in the DT_HP_NEEDED entry. If the library is specified with -l, the dynamic path bit
is set to TRUE.
If the dependent library's internal name contains no path, it is inserted at the end of the path
where the shared library is found at link time, replacing the library's filename. If the library
is specified with -l, the dynamic path bit is set to TRUE.
If the dependent shared library does not have an internal name, the path where the library is
found and the library filename is recorded in the DT_HP_NEEDED entry. If specified with -l,
the dynamic path bit is set to TRUE.
If the shared libraries are specified with a relative or no path in this mode, the linker expands
the current working directory when constructing the DT_HP_NEEDED entry. So instead of
getting something like ./libdk.so, you get /home/your_dir/libdk.so.
All DT_HP_NEEDED entries with the dynamic path bit set are subject to dynamic path lookup.
Using Shared Libraries in Default Mode 125