fbpx
Wikipedia

Linker (computing)

In computing, a linker or link editor is a computer system program that takes one or more object files (generated by a compiler or an assembler) and combines them into a single executable file, library file, or another "object" file.

An illustration of the linking process. Object files and static libraries are assembled into a new library or executable

A simpler version that writes its output directly to memory is called the loader, though loading is typically considered a separate process.[1][2]

Overview edit

Computer programs typically are composed of several parts or modules; these parts/modules do not need to be contained within a single object file, and in such cases refer to each other by means of symbols as addresses into other modules, which are mapped into memory addresses when linked for execution.

While the process of linking is meant to ultimately combine these independent parts, there are many good reasons to develop those separately at the source-level. Among these reasons are the ease of organizing several smaller pieces over a monolithic whole and the ability to better define the purpose and responsibilities of each individual piece, which is essential for managing complexity and increasing long-term maintainability in software architecture.

Typically, an object file can contain three kinds of symbols:

  • defined "external" symbols, sometimes called "public" or "entry" symbols, which allow it to be called by other modules,
  • undefined "external" symbols, which reference other modules where these symbols are defined, and
  • local symbols, used internally within the object file to facilitate relocation.

For most compilers, each object file is the result of compiling one input source code file. When a program comprises multiple object files, the linker combines these files into a unified executable program, resolving the symbols as it goes along.

Linkers can take objects from a collection called a library or runtime library. Most linkers do not include all the object files in a static library in the output executable; they include only those object files from the library that are referenced by other object files or libraries directly or indirectly. But for a shared library, the entire library has to be loaded during runtime as it is not known which functions or methods will be called during runtime. Library linking may thus be an iterative process, with some referenced modules requiring additional modules to be linked, and so on. Libraries exist for diverse purposes, 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 into 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). This pass is usually omitted on hardware offering virtual memory: every program is put into its own address space, so there is no conflict even if all programs load at the same base address. This pass may also be omitted if the executable is a position independent executable.

On some Unix variants, such as SINTRAN III, the process performed by a linker (assembling object files into a program) was called loading (as in loading executable code onto a file).[3] Additionally, in some operating systems, the same program handles both the jobs of linking and loading a program (dynamic linking).

Dynamic linking edit

Many operating system environments allow dynamic linking, deferring the resolution of some undefined symbols until a program is run. That means that the executable code 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 executable file, thus saving limited memory and disk space.
  • If a bug in a library function is corrected by replacing the library or performance is improved, all programs using it dynamically will benefit from the correction after restarting them. Programs that included this function by static linking would have to be re-linked first.

There are also disadvantages:

  • Known on the Windows platform as "DLL hell", an incompatible updated library will break executables that depended on the behavior of the previous version of the library if the newer version is not correctly backward compatible.
  • A program, together with the libraries it uses, might be certified (e.g. as to correctness, documentation requirements, or performance) as a package, but not if components can be replaced (this also argues against automatic OS updates in critical systems; in both cases, the OS and libraries form part of a qualified environment).

Contained or virtual environments may further allow system administrators to mitigate or trade-off these individual pros and cons.

Static linking edit

Static linking is the result of the linker copying all library routines used in the program into the executable image. This may require more disk space and memory than dynamic linking, but is more portable, since it does not require the presence of the library on the system where it runs. Static linking also prevents "DLL hell", since each program includes exactly the versions of library routines that it requires, with no conflict with other programs. A program using just a few routines from a library does not require the entire library to be installed.

Relocation edit

As the compiler has no information on the layout of objects in the final output, it cannot take advantage of shorter or more efficient instructions that place a requirement on the address of another object. For example, a jump instruction can reference an absolute address or an offset from the current location, and the offset could be expressed with different lengths depending on the distance to the target. By first generating the most conservative instruction (usually the largest relative or absolute variant, depending on platform) and adding relaxation hints, it is possible to substitute shorter or more efficient instructions during the final link. In regard to jump optimizations this is also called automatic jump-sizing.[4] This step can be performed only after all input objects have been read and assigned temporary addresses; the linker relaxation pass subsequently reassigns addresses, which may in turn allow more potential relaxations to occur. In general, the substituted sequences are shorter, which allows this process to always converge on the best solution given a fixed order of objects; if this is not the case, relaxations can conflict, and the linker needs to weigh the advantages of either option.

While instruction relaxation typically occurs at link-time, inner-module relaxation can already take place as part of the optimizing process at compile-time. In some cases, relaxation can also occur at load-time as part of the relocation process or combined with dynamic dead-code elimination techniques.

Linkage editor edit

In IBM System/360 mainframe environments such as OS/360, including z/OS for the z/Architecture mainframes, this type of program is known as a linkage editor. As the name implies a linkage editor has the additional capability of allowing the addition, replacement, and/or deletion of individual program sections. Operating systems such as OS/360 have format for executable load-modules containing supplementary data about the component sections of a program, so that an individual program section can be replaced, and other parts of the program updated so that relocatable addresses and other references can be corrected by the linkage editor, as part of the process.

One advantage of this is that it allows a program to be maintained without having to keep all of the intermediate object files, or without having to re-compile program sections that haven't changed. It also permits program updates to be distributed in the form of small files (originally card decks), containing only the object module to be replaced. In such systems, object code is in the form and format of 80-byte punched-card images, so that updates can be introduced into a system using that medium. In later releases of OS/360 and in subsequent systems, load-modules contain additional data about versions of components modules, to create a traceable record of updates. It also allows one to add, change, or remove an overlay structure from an already linked load module.

The term "linkage editor" should not be construed as implying that the program operates in a user-interactive mode like a text editor. It is intended for batch-mode execution, with the editing commands being supplied by the user in sequentially organized files, such as punched cards, DASD, or magnetic tape.

Linkage editing (IBM nomenclature) or consolidation or collection (ICL nomenclature) refers to the linkage editor's or consolidator's act of combining the various pieces into a relocatable binary, whereas the loading and relocation into an absolute binary at the target address is normally considered a separate step.[2]

Linker Control Scripts edit

In the beginning linkers gave users very limited control over the arrangement of generated output object files. As the target systems became complex with different memory requirements such as embedded systems, it became necessary to give users control to generate output object files with their specific requirements such as defining base addresses' of segments. Linkers control scripts were used for this.

Common implementations edit

On Unix and Unix-like systems, the linker is known as "ld". Origins of the name "ld" are "LoaDer" and "Link eDitor". The term "loader" was used to describe the process of loading external symbols from other programs during the process of linking.[5]

GNU linker edit

The GNU linker (or GNU ld) is the GNU Project's free software implementation of the Unix command ld. GNU ld runs the linker, which creates an executable file (or a library) from object files created during compilation of a software project. A linker script may be passed to GNU ld to exercise greater control over the linking process.[6] The GNU linker is part of the GNU Binary Utilities (binutils). Two versions of ld are provided in binutils: the traditional GNU ld based on bfd, and a "streamlined" ELF-only version called gold.

The command-line and linker script syntaxes of GNU ld is the de facto standard in much of the Unix-like world. The LLVM project's linker, lld, is designed to be drop-in compatible,[7] and may be used directly with the GNU compiler. Another drop-in replacement, mold, is a highly parallelized and faster alternative which is also supported by GNU tools.[8]

See also edit

References edit

  1. ^ IBM OS Linkage Editor and Loader (PDF). IBM Corporation. 1972. (PDF) from the original on 2020-03-06. Retrieved 2020-03-07.
  2. ^ a b Barron, David William (1978) [1971, 1969]. "5.7. Linkage editors and consolidators". Written at University of Southampton, Southampton, UK. In Floretin, J. John (ed.). Assemblers and Loaders. Computer Monographs (3 ed.). New York, US: Elsevier North-Holland Inc. pp. 65–66. ISBN 0-444-19462-2. LCCN 78-19961. (xii+100 pages)
  3. ^ BRF-LINKER User Manual. August 1984. ND-60.196.01.
  4. ^ Salomon, David (February 1993) [1992]. "8.2.3 Automatic jump-sizing" (PDF). Written at California State University, Northridge, California, US. In Chivers, Ian D. (ed.). Assemblers and Loaders. Ellis Horwood Series In Computers And Their Applications (1 ed.). Chicester, West Sussex, UK: Ellis Horwood Limited / Simon & Schuster International Group. pp. 237–238. ISBN 0-13-052564-2. (PDF) from the original on 2020-03-23. Retrieved 2008-10-01. (xiv+294+4 pages)
  5. ^ "1. ld". UNIX PROGRAMMER'S MANUAL (6 ed.). May 1975.
  6. ^ "GNU Binutils: Linker Scripts". 2018-07-18. from the original on 2020-03-06. Retrieved 2019-01-18.
  7. ^ "LLD - The LLVM Linker — lld 14 documentation". lld.llvm.org.
  8. ^ "GCC 12 Adds Support For Using The Mold Linker". www.phoronix.com.

Further reading edit

  • Fraser, Christopher W.; Hanson, David R. (April 1982). "A Machine Independent Linker". Software: Practice and Experience. John Wiley & Sons Ltd. 12 (4): 351–366. doi:10.1002/spe.4380120407. ISSN 1097-024X. S2CID 206508204.
  • (PDF) (3 ed.). International Business Machines Corporation. 1969-07-23 [June 1967]. Program number 360S-ED-510. File No. S360-31. Form Y28-6610-2. Archived from the original (PDF) on 2007-10-01. Retrieved 2020-03-07.
  • Jones, Douglas W. (August 1983). "Assembly Language as Object Code". Software: Practice and Experience. John Wiley & Sons Ltd. 13 (8): 715–725. doi:10.1002/spe.4380130806. ISSN 1097-024X. S2CID 42995338.
  • Levine, John R. (2000) [October 1999]. Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, US: Morgan Kaufmann. ISBN 1-55860-496-0. OCLC 42413382. Archived from the original on 2012-12-05. Retrieved 2020-01-12. Code: [1][2] Errata: [3]
  • Presser, Leon; White, John R. (September 1972). "Linkers and Loaders" (PDF). ACM Computing Surveys. University of California, Santa Barbara, California, US. 4 (3): 149–167. doi:10.1145/356603.356605. S2CID 5694671. (PDF) from the original on 2020-03-07. Retrieved 2020-03-07. (19 pages)
  • Ramsey, Norman (May 1996). "Relocating Machine Instructions by Currying" (PDF). ACM SIGPLAN Notices. 31 (5): 226–236. doi:10.1145/249069.231429. (PDF) from the original on 2020-05-18.

External links edit

  • Ian Lance Justin's Linkers blog entries
  • Linkers and Loaders, a Linux Journal article by Sandeep Grover
  • GNU linker manual
  • LLD - The LLVM Linker
  • ld(1): The GNU linker – Linux User Manual – User Commands

linker, computing, computing, linker, link, editor, computer, system, program, that, takes, more, object, files, generated, compiler, assembler, combines, them, into, single, executable, file, library, file, another, object, file, illustration, linking, proces. In computing a linker or link editor is a computer system program that takes one or more object files generated by a compiler or an assembler and combines them into a single executable file library file or another object file An illustration of the linking process Object files and static libraries are assembled into a new library or executableA simpler version that writes its output directly to memory is called the loader though loading is typically considered a separate process 1 2 Contents 1 Overview 2 Dynamic linking 3 Static linking 4 Relocation 5 Linkage editor 6 Linker Control Scripts 7 Common implementations 7 1 GNU linker 8 See also 9 References 10 Further reading 11 External linksOverview editComputer programs typically are composed of several parts or modules these parts modules do not need to be contained within a single object file and in such cases refer to each other by means of symbols as addresses into other modules which are mapped into memory addresses when linked for execution While the process of linking is meant to ultimately combine these independent parts there are many good reasons to develop those separately at the source level Among these reasons are the ease of organizing several smaller pieces over a monolithic whole and the ability to better define the purpose and responsibilities of each individual piece which is essential for managing complexity and increasing long term maintainability in software architecture Typically an object file can contain three kinds of symbols defined external symbols sometimes called public or entry symbols which allow it to be called by other modules undefined external symbols which reference other modules where these symbols are defined and local symbols used internally within the object file to facilitate relocation For most compilers each object file is the result of compiling one input source code file When a program comprises multiple object files the linker combines these files into a unified executable program resolving the symbols as it goes along Linkers can take objects from a collection called a library or runtime library Most linkers do not include all the object files in a static library in the output executable they include only those object files from the library that are referenced by other object files or libraries directly or indirectly But for a shared library the entire library has to be loaded during runtime as it is not known which functions or methods will be called during runtime Library linking may thus be an iterative process with some referenced modules requiring additional modules to be linked and so on Libraries exist for diverse purposes 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 into 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 This pass is usually omitted on hardware offering virtual memory every program is put into its own address space so there is no conflict even if all programs load at the same base address This pass may also be omitted if the executable is a position independent executable On some Unix variants such as SINTRAN III the process performed by a linker assembling object files into a program was called loading as in loading executable code onto a file 3 Additionally in some operating systems the same program handles both the jobs of linking and loading a program dynamic linking Dynamic linking editSee also Dynamic linker Many operating system environments allow dynamic linking deferring the resolution of some undefined symbols until a program is run That means that the executable code 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 executable file thus saving limited memory and disk space If a bug in a library function is corrected by replacing the library or performance is improved all programs using it dynamically will benefit from the correction after restarting them Programs that included this function by static linking would have to be re linked first There are also disadvantages Known on the Windows platform as DLL hell an incompatible updated library will break executables that depended on the behavior of the previous version of the library if the newer version is not correctly backward compatible A program together with the libraries it uses might be certified e g as to correctness documentation requirements or performance as a package but not if components can be replaced this also argues against automatic OS updates in critical systems in both cases the OS and libraries form part of a qualified environment Contained or virtual environments may further allow system administrators to mitigate or trade off these individual pros and cons Static linking editStatic linking is the result of the linker copying all library routines used in the program into the executable image This may require more disk space and memory than dynamic linking but is more portable since it does not require the presence of the library on the system where it runs Static linking also prevents DLL hell since each program includes exactly the versions of library routines that it requires with no conflict with other programs A program using just a few routines from a library does not require the entire library to be installed Relocation editAs the compiler has no information on the layout of objects in the final output it cannot take advantage of shorter or more efficient instructions that place a requirement on the address of another object For example a jump instruction can reference an absolute address or an offset from the current location and the offset could be expressed with different lengths depending on the distance to the target By first generating the most conservative instruction usually the largest relative or absolute variant depending on platform and adding relaxation hints it is possible to substitute shorter or more efficient instructions during the final link In regard to jump optimizations this is also called automatic jump sizing 4 This step can be performed only after all input objects have been read and assigned temporary addresses the linker relaxation pass subsequently reassigns addresses which may in turn allow more potential relaxations to occur In general the substituted sequences are shorter which allows this process to always converge on the best solution given a fixed order of objects if this is not the case relaxations can conflict and the linker needs to weigh the advantages of either option While instruction relaxation typically occurs at link time inner module relaxation can already take place as part of the optimizing process at compile time In some cases relaxation can also occur at load time as part of the relocation process or combined with dynamic dead code elimination techniques Linkage editor editIn IBM System 360 mainframe environments such as OS 360 including z OS for the z Architecture mainframes this type of program is known as a linkage editor As the name implies a linkage editor has the additional capability of allowing the addition replacement and or deletion of individual program sections Operating systems such as OS 360 have format for executable load modules containing supplementary data about the component sections of a program so that an individual program section can be replaced and other parts of the program updated so that relocatable addresses and other references can be corrected by the linkage editor as part of the process One advantage of this is that it allows a program to be maintained without having to keep all of the intermediate object files or without having to re compile program sections that haven t changed It also permits program updates to be distributed in the form of small files originally card decks containing only the object module to be replaced In such systems object code is in the form and format of 80 byte punched card images so that updates can be introduced into a system using that medium In later releases of OS 360 and in subsequent systems load modules contain additional data about versions of components modules to create a traceable record of updates It also allows one to add change or remove an overlay structure from an already linked load module The term linkage editor should not be construed as implying that the program operates in a user interactive mode like a text editor It is intended for batch mode execution with the editing commands being supplied by the user in sequentially organized files such as punched cards DASD or magnetic tape Linkage editing IBM nomenclature or consolidation or collection ICL nomenclature refers to the linkage editor s or consolidator s act of combining the various pieces into a relocatable binary whereas the loading and relocation into an absolute binary at the target address is normally considered a separate step 2 Linker Control Scripts editIn the beginning linkers gave users very limited control over the arrangement of generated output object files As the target systems became complex with different memory requirements such as embedded systems it became necessary to give users control to generate output object files with their specific requirements such as defining base addresses of segments Linkers control scripts were used for this Common implementations editOn Unix and Unix like systems the linker is known as ld Origins of the name ld are LoaDer and Link eDitor The term loader was used to describe the process of loading external symbols from other programs during the process of linking 5 GNU linker edit The GNU linker or GNU ld is the GNU Project s free software implementation of the Unix command ld GNU ld runs the linker which creates an executable file or a library from object files created during compilation of a software project A linker script may be passed to GNU ld to exercise greater control over the linking process 6 The GNU linker is part of the GNU Binary Utilities binutils Two versions of ld are provided in binutils the traditional GNU ld based on bfd and a streamlined ELF only version called gold The command line and linker script syntaxes of GNU ld is the de facto standard in much of the Unix like world The LLVM project s linker lld is designed to be drop in compatible 7 and may be used directly with the GNU compiler Another drop in replacement mold is a highly parallelized and faster alternative which is also supported by GNU tools 8 See also edit nbsp Computer programming portal nbsp Free and open source software portalBinary File Descriptor library libbfd Compile and go system DLL hell Direct binding Dynamic binding Dynamic dead code elimination Dynamic dispatch Dynamic library Dynamic linker Dynamic loading Dynamic link library External variable Library Loader Name decoration Prelinking prebinding Relocation Smart linking Static library Gold linker References edit IBM OS Linkage Editor and Loader PDF IBM Corporation 1972 Archived PDF from the original on 2020 03 06 Retrieved 2020 03 07 a b Barron David William 1978 1971 1969 5 7 Linkage editors and consolidators Written at University of Southampton Southampton UK In Floretin J John ed Assemblers and Loaders Computer Monographs 3 ed New York US Elsevier North Holland Inc pp 65 66 ISBN 0 444 19462 2 LCCN 78 19961 xii 100 pages BRF LINKER User Manual August 1984 ND 60 196 01 Salomon David February 1993 1992 8 2 3 Automatic jump sizing PDF Written at California State University Northridge California US In Chivers Ian D ed Assemblers and Loaders Ellis Horwood Series In Computers And Their Applications 1 ed Chicester West Sussex UK Ellis Horwood Limited Simon amp Schuster International Group pp 237 238 ISBN 0 13 052564 2 Archived PDF from the original on 2020 03 23 Retrieved 2008 10 01 xiv 294 4 pages 1 ld UNIX PROGRAMMER S MANUAL 6 ed May 1975 GNU Binutils Linker Scripts 2018 07 18 Archived from the original on 2020 03 06 Retrieved 2019 01 18 LLD The LLVM Linker lld 14 documentation lld llvm org GCC 12 Adds Support For Using The Mold Linker www phoronix com Further reading editFraser Christopher W Hanson David R April 1982 A Machine Independent Linker Software Practice and Experience John Wiley amp Sons Ltd 12 4 351 366 doi 10 1002 spe 4380120407 ISSN 1097 024X S2CID 206508204 Operating System 360 Linkage Editor E Program Logic Manual PDF 3 ed International Business Machines Corporation 1969 07 23 June 1967 Program number 360S ED 510 File No S360 31 Form Y28 6610 2 Archived from the original PDF on 2007 10 01 Retrieved 2020 03 07 Jones Douglas W August 1983 Assembly Language as Object Code Software Practice and Experience John Wiley amp Sons Ltd 13 8 715 725 doi 10 1002 spe 4380130806 ISSN 1097 024X S2CID 42995338 Levine John R 2000 October 1999 Linkers and Loaders The Morgan Kaufmann Series in Software Engineering and Programming 1 ed San Francisco US Morgan Kaufmann ISBN 1 55860 496 0 OCLC 42413382 Archived from the original on 2012 12 05 Retrieved 2020 01 12 Code 1 2 Errata 3 Presser Leon White John R September 1972 Linkers and Loaders PDF ACM Computing Surveys University of California Santa Barbara California US 4 3 149 167 doi 10 1145 356603 356605 S2CID 5694671 Archived PDF from the original on 2020 03 07 Retrieved 2020 03 07 19 pages Ramsey Norman May 1996 Relocating Machine Instructions by Currying PDF ACM SIGPLAN Notices 31 5 226 236 doi 10 1145 249069 231429 Archived PDF from the original on 2020 05 18 External links edit nbsp Look up linker in Wiktionary the free dictionary Ian Lance Justin s Linkers blog entries Linkers and Loaders a Linux Journal article by Sandeep Grover Another Listing of Where to Get a Complete Collection of Free Tools for Assembly Language Development GNU linker manual LLD The LLVM Linker ld 1 The GNU linker Linux User Manual User Commands Retrieved from https en wikipedia org w index php title Linker computing amp oldid 1185757138 Linkage editor, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.