HP-UX Floating-Point Guide

Chapter 7 181
Performance Tuning
Shared Libraries versus Archive Libraries
Shared Libraries versus Archive
Libraries
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.