Linker
as a system program takes relocatable object files and command line arguments
in order to generate an executable object file. The linker is responsible
for locating individual parts of the object files in the executable image,
ensuring that all the required code and data is available to the image and any
addresses required are handled correctly.
Static
and dynamic linking are two processes of collecting and combining multiple
object files in order to create a single executable. 
Static
linking is the process of copying all library modules used in the program into
the final executable image. This is performed by the linker and it is done as
the last step of the compilation process.
During dynamic linking the
name of the shared library is placed in the final executable file while the
actual linking takes place at run time when both executable file and library
are placed in the memory.
Differences between Static linking and Dynamic linking:
| 
Static
  linking | 
Dynamic
  linking | |
| 
Sharing
  external program | 
External
  called program cannot be shared. It requires duplicate copies of programs in
  memory.  | 
Dynamic
  linking lets several programs use a single copy of an executable module. | 
| 
File size | 
Statically
  linked files are significantly larger in size because external programs are
  built into the executable files. | 
Dynamic
  linking significantly reduces the size of executable programs because it uses
  only one copy of shared library | 
| 
Easiness
  to update | 
In static
  linking if any of the external programs has changed then they have to be
  recompiled and re-linked again else the changes won't reflect in existing
  executable file. | 
In dynamic
  linking individual shared modules and bug fixes can be updated and
  recompiled. | 
| 
Speed | 
Programs
  that use statically-linked libraries are usually faster than those that use
  shared libraries. | 
Programs
  that use shared libraries are usually slower than those that use
  statically-linked libraries. | 
| 
Compati-bility | 
In
  statically-linked programs, all code is contained in a single executable
  module. Therefore, they never run into compatibility issues. | 
Dynamically
  linked programs are dependent on having a compatible library. If a library is
  changed, applications might have to be reworked to be made compatible with
  the new version of the library. | 
Advantages:
| 
Static
  linking | 
Dynamic
  linking | 
| 
•     
  Static linking is efficient at run time.  
•     
  It has less system calls.  
•     
  Static linking can make binaries easier to distribute to diverse user
  environment.  
•     
  It let the code run in very limited environments. | 
•     
  Dynamic linking is more flexible. 
•     
  It is more efficient in resource utilization, taking less memory space,
  cache space and disk space. 
•     
  It is easy to update and fix the bugs. | 
| 
Static linking | 
Dynamic linking | |
| 
Source: | 

 
No comments:
Post a Comment