FACTOID # 179: Japan has more road than Canada.
 
 Home   Encyclopedia   Statistics   Countries A-Z   Flags   Maps   Education   Forum   FAQ   About 
 
 
 
WHAT'S NEW
RECENT ARTICLES
More Recent Articles »
 

SEARCH ALL

FACTS & STATISTICS    Advanced view

Search encyclopedia, statistics and forums:

 

 

(* = Graphable)

 

 


Encyclopedia > Dynamic linking

A linker or link editor is a program that takes one or more objects generated by compilers and assembles them into a single executable program.


In IBM mainframe environments such as OS/360 this program is known as a linkage editor.


(On Unix variants the term loader is often used as a synonym for linker, blurring the distinction between the compile-time process, and the run-time process. Although these processes are somewhat similar, this article will still use linking for the former and loading for the latter.)


The objects are program modules containing machine code and information for the linker. This information comes mainly in the form of symbol definitions, which come in two varieties:

  • Defined or exported symbols are functions or variables that are present in the module represented by the object, and which should be available for use by other modules.
  • Undefined or imported symbols are functions or variables that are called or referenced by this object, but not internally defined.

In a nutshell, the linker's job is to resolve references to undefined symbols by finding out which other object defines a symbol in question, and replacing placeholders with the symbol's address.


Linkers can take objects from a collection called a library. The advantage of such a collection over a single big object is that the final program does not include the whole library, only those objects from it that are needed (define relevant symbols). Libraries for diverse purposes exist, and one or more system libraries are usually linked in by default.


The linker also takes care of arranging the objects in a program's address space. This may involve relocating code that assumes a specific base address to another base. Since a compiler seldom knows where an object will reside, it often assumes a fixed base location (for example, zero). Relocating machine code may involve re-targeting of absolute jumps, loads and stores.


The executable output by the linker may need another relocation pass when it is finally loaded into memory (just before execution). On hardware offering virtual memory this is usually omitted, though -- every program is put into its own address space, so there is no conflict even if all programs load at the same base address.


Modern operating system environments allow dynamic linking, that is the postponing of the resolving of some undefined symbols until a program is run. That means that the executable still contains undefined symbols, plus a list of objects or libraries that will provide definitions for these. Loading the program will load these objects/libraries as well, and perform a final linking.


This approach offers two advantages:

  • Often-used libraries (for example the standard system libraries) need to be stored in only one location, not duplicated in every single binary.
  • If an error in a library function is corrected by replacing the library, all programs using it dynamically will immediately benefit from the correction. Programs that included this function by static linking would have to be re-linked first.

See also

References

  • John R. Levine: Linkers and Loaders, Morgan-Kauffman, ISBN 1-55860-496-0

  Results from FactBites:
 
Dynamic Linking and Loading (0 words)
Dynamically linked shared libraries are easier to update than static linked shared libraries.
Dynamic linking permits a program to load and unload routines at runtine, a facility that can otherwise be very difficult to provide.
Linking by ordinals is slightly more efficient since it avoids a symbol lookup, but considerably more error prone since it's up to the person who builds a DLL to ensure that ordinals stay the same from one library version to another.
Reference Linking in a Hybrid Library Environment. Part 1: Frameworks for Linking (4936 words)
Dynamic linking: Some interesting initiatives have started from a decentralized concept, where not all of the data that is required to build an interlinked information environment can be under the control of the authority creating the environment.
Linking from a record in an abstracting database leads to the corresponding full-text, and linking from a citation in a paper leads to a bibliographic description in a predefined database.
Link verification: inherent to dynamic linking approaches is the uncertainty regarding the success of a link that has been created on-the-fly.
  More results at FactBites »


 
 

COMMENTARY     


Share your thoughts, questions and commentary here
Your name
Your comments

Want to know more?
Search encyclopedia, statistics and forums:

 


Lesson Plans | Student Area | Student FAQ | Reviews | Press Releases |  Feeds | Contact
The Wikipedia article included on this page is licensed under the GFDL.
Images may be subject to relevant owners' copyright.
All other elements are (c) copyright NationMaster.com 2003-5. All Rights Reserved.
Usage implies agreement with terms, 1022, m