HP-UX Linker and Libraries User's Guide
When used with BIND_DEFERRED and the BIND_NONFATAL modifier, it has the same behavior,
except that when a symbol definition cannot be found, the dynamic loader looks in the global
symbol set. If a definition still cannot be found within the global set, a run-time symbol-binding
error occurs.
BIND_TOGETHER Modifier
BIND_TOGETHER modifies the behavior of BIND_FIRST. When the library being loaded has
dependencies, BIND_FIRST causes each dependent library to be loaded and bound separately.
If the libraries have interdependencies, the load may fail because the needed symbols are not
available when needed.
BIND_FIRST | BIND_TOGETHER causes the library being loaded and its dependent libraries to
be bound all at the same time, thereby resolving interdependencies. If you are not using
BIND_FIRST, libraries are bound together by default so this option has no effect.
BIND_BREADTH_FIRST Modifier
This flag causes the dependent libraries to be loaded breadth first. By default, the PA-64 and IPF
mode shl_load loads dependent libraries depth-first. This modifier overrides the default load
order.
Binding Flags Examples
Suppose you have the libraries libE.so, libF.so, and libG.so. The libE library depends
onlibF and libF depends on libG. In addition, libG depends on libF-libF and libG are
interdependent. Your program loads libE.so with shl_load(). When using BIND_DEFERRED
or BIND_IMMEDIATE without BIND_FIRST, these libraries are loaded such that all symbols are
visible and the interdependencies are resolved:
shl_t libE;
libE = shl_load("libE.so", BIND_IMMEDIATE, 0);
shl_load succeeds.
When using BIND_IMMEDIATE | BIND_FIRST, however, libG is loaded and bound first and
because it depends on libF, an error results because the needed symbols in libF are not yet available:
libE = shl_load("libE.so", BIND_IMMEDIATE | BIND_FIRST, 0);
shl_load fails.
Using BIND_IMMEDIATE | BIND_FIRST | BIND_TOGETHER loads libE, libF, and
libG together and correctly resolves all symbols:
libE = shl_load("libE.so", BIND_IMMEDIATE | BIND_FIRST | BIND_TOGETHER, 0);
shl_load succeeds.
The shl_findsym Routine
The shl_findsym routine obtains the address of an exported symbol from a shared library. To
call a routine or access data in an explicitly loaded library, first get the address of the routine or
data with shl_findsym.
Syntax
int shl_findsym( shl_t * handle,
const char * sym,
short type,
void * value )
172 Shared Library Management Routines