Difference between Static and Shared libraries
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.
|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.
|Performed by linkers
|Performed by operating System
|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.
|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.
|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 .
Share your thoughts in the comments
Please Login to comment...