Executable An executable library consists of code that has been converted from source code into
machine code or an intermediate form such as
bytecode. A linker allows for using library objects by associating each reference with an address at which the object is located. For example, in
C, a library function is invoked via C's normal function call
syntax and
semantics. A variant is a library containing compiled code (object code in IBM's nomenclature) in a form that cannot be loaded by the OS but that can be read by the linker.
Static A
static library is an executable library that is linked into a program at build-time by a linker (or whatever the build tool is called that does linking). This process, and the resulting stand-alone file, is known as a
static build of the program. A static build may not need any further
relocation if
virtual memory is used and no
address space layout randomization is desired. A static library is sometimes called an
archive on Unix-like systems.
Dynamic A
dynamic library is linked when the program is run either at
load-time or
runtime. The dynamic library was intended after the static library to support additional
software deployment flexibility.
Sources A source library consists of source code, not compiled code.
Shared A
shared library is a library that contains
executable code designed to be used by multiple
computer programs or other libraries at
runtime, with only one copy of that code in memory, shared by all programs using the code.
Object Although generally an obsolete technology today, an object library exposes resources for
object-oriented programming (OOP) and a distributed object is a remote object library. Examples include:
COM/DCOM,
SOM/DSOM,
DOE,
PDO and various
CORBA-based systems. The object library technology was developed since as OOP became popular, it became apparent that OOP runtime binding required information than contemporary libraries did not provide. In addition to the names and entry points of the code located within, due to inheritance, OOP binding also requires a list of dependencies since the full definition of a method may be in different places. Further, this requires more than listing that one library requires the services of another. In OOP, the libraries themselves may not be known at
compile time, and vary from system to system. The remote object technology was developed in parallel to support multi-tier programs with a
user interface application running on a
personal computer (PC) using services of a
mainframe or
minicomputer such as data storage and processing. For instance, a program on a PC would send messages to a minicomputer via
remote procedure call (RPC) to retrieve relatively small samples from a relatively large dataset. In response, distributed object technology was developed.
Class A class library contains
classes that can be used to create
objects. In
Java, for example, classes are contained in
JAR files and objects are created at runtime from the classes. However, in
Smalltalk, a class library is the starting point for a
system image that includes the entire state of the environment, classes and all instantiated objects. Most class libraries are stored in a
package repository (such as Maven Central for Java). Client code explicitly specifies dependencies to external libraries in build configuration files (such as a Maven Pom in Java).
Remote A remote library runs on another computer and its assets are accessed via
remote procedure call (RPC) over a network. This
distributed architecture allows for minimizing installation of the library and support for it on each consuming system and ensuring consistent versioning. A significant downside is that each library call entails significantly more overhead than for a local library.
Runtime A
runtime library provides access to the
runtime environment that is available to a program tailored to the host
platform.
Language standard Many modern
programming languages specify a
standard library that provides a base level of functionality for the language environment.
Code generation A code generation library has a high-level
API generating or transforming
byte code for
Java. They are used by
aspect-oriented programming, some data access frameworks, and for testing to generate dynamic proxy objects. They also are used to intercept field access. ==File naming==