Open In App

Difference between Static and Shared libraries

Improve
Improve
Like Article
Like
Save
Share
Report

In programming, a library is a collection of pre-compiled pieces of code that can be reused in a program. Libraries simplify life for programmers, in that they provide reusable functions, routines, classes, data structures and so on which they can be reused in the programs. 

Static Libraries: A Static library or statically-linked library is a set of routines, external functions and variables which are resolved in a caller at compile-time and copied into a target application by a compiler, linker, or binder, producing an object file and a stand-alone executable. This executable and the process of compiling it are both known as a static build of the program. Historically, libraries could only be static. They are usually faster than the shared libraries because a set of commonly used object files is put into a single library executable file. One can build multiple executables without the need to recompile the file. Because it is a single file to be built, use of link commands are simpler than shared library link commands, because you specify the name of the static library.

Shared Libraries: Shared libraries are .so (or in Windows .dll, or in OS X .dylib) files. These are linked dynamically simply including the address of the library (whereas static linking is a waste of space). Dynamic linking links the libraries at the run-time. Thus, all the functions are in a special place in memory space, and every program can access them, without having multiple copies of them.

properties Static library Shared library
Linking time It happens as the last step of the compilation process. After the program is placed in the memory Shared libraries are added during linking process when executable file and libraries are added to the memory.
Means Performed by linkers Performed by operating System
Size Static libraries are much bigger in size, because external programs are built in the executable file. Dynamic libraries are much smaller, because there is only one copy of dynamic library that is kept in memory.
External file changes Executable file will have to be recompiled if any changes were applied to external files. In shared libraries, no need to recompile the executable.
Time Takes longer to execute, because loading into the memory happens every time while executing. It is faster because shared library code is already in the memory.
Compatibility Never has compatibility issue, since all code is in one executable module. Programs are dependent on having a compatible library. Dependent program will not work if library gets removed from the system .

Last Updated : 15 Nov, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads