A program that is linked to shared libraries will generally
run more slowly than a program that is linked to archive libraries.
If you use archive libraries, the linker binds into your executable
code an actual copy of each library routine you call. If you use
shared libraries, the linker merely notes in your executable code
that the code calls a routine in a shared library. Then, when the
code begins execution, the dynamic loader loads and maps the shared
libraries into the process's address space and calls the
routines indirectly as they are needed by means of a linkage table.
Using shared libraries saves space in the executable file, but at
the expense of the time needed to resolve references to the routines
in the shared libraries.
The performance impact of shared libraries is likely to be
noticeable only if a program makes heavy use of library functions,
as many floating-point applications do. If your program seems to
be running unacceptably slowly with shared libraries, you may want
to find out whether archive libraries make a difference.
For performance reasons, HP provides
the BLAS library libblas
only as an archive library, not as a shared library. The C math
library libm
and the Fortran and Pascal library libcl,
however, are provided in both shared and archive versions. The linker
by default looks for shared libraries before it looks for archive
libraries, so if you want to use the archive library version of
libm or libcl,
you need to specify the -a archive
option to the linker. (To do this on the compile command line, specify
-Wl,-a,archive.)
See the HP-UX Linker and Libraries Online User Guide for more
information about shared libraries and archive libraries.