System Interface Guide


Solaris provides both static and dynamic implementations of libraries. Static libraries do not provide an interface; they provide only an implementation. The application programming interface of Solaris is made available to developers through the shared libraries (also called shared objects). In the runtime environment, a dynamic executable and shared objects are processed by the runtime linker to produce a runnable process. The official API to the system is the interface between an application and the dynamic shared libraries.

Static Libraries

The traditional, static, implementation of libraries (.a files or archives), do not separate the application programming interface from its implementation (the contents of the library). When an application is linked to a static library, the object code that implements that library is bound into the executable object that results from the build. The source-level programming interface to the library can be preserved, but the application must be relinked to produce an executable that runs on a later version of an operating system. Future binary compatibility is assured only when shared libraries are used.

The presence of static libraries is a historical artifact and there is no mechanism to define their interfaces in a way that is separate from their implementation. For this reason, use of static libraries should be avoided by new applications.

Dynamic libraries

Unlike the static libraries, shared libraries do separate the application programming interface from the implementation. The interface is bound to an implementation of the library only at runtime. This allows SMI to evolve the library's implementation - such as changing internal interfaces, while maintaining the API and preserving binary compatibility with applications built against it.