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 -lor -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