Linking and Loading Linker collects procedures and links

  • Slides: 8
Download presentation
Linking and Loading • Linker collects procedures and links them together object modules into

Linking and Loading • Linker collects procedures and links them together object modules into one executable program. • Why isn't everything written as just one big program, saving the necessity of linking? – Efficiency: if just one function is changed in a 100 K line program, why recompile the whole program? Just recompile the one function and relink. – Multiple-language programs – Other reasons?

Relocation • Before widespread support for virtual memory, code had to be relocatable (could

Relocation • Before widespread support for virtual memory, code had to be relocatable (could not contain fixed memory addresses) • With VM, when a page is swapped out, bringing it back in makes the references change (update PT) • With shared libraries, each library decides on its own (fixed) addresses collision of addresses • Relocation problem same as before virtual memory – What is the problem? No fixed addresses (calls, vars, ifs)

Object Modules: linking and loading • Structure of an object module – Entry points

Object Modules: linking and loading • Structure of an object module – Entry points – External symbols • Binding time and dynamic relocation: possible binding times – Virtual addresses – Relocation register – Use addresses relative to program counter

Dynamic linking • Unix systems: Code is typically compiled as a dynamic shared object

Dynamic linking • Unix systems: Code is typically compiled as a dynamic shared object (DSO): • Dynamic vs. static linking $ gcc -static hello. c -o hello-static $ gcc hello. c -o hello-dynamic $ ls -l hello 80 hello. c 13724 hello-dynamic 383 hello. s 1688756 hello-static • if you are the sys admin, which do you prefer?

Advantages of dynamic linking • The executable is smaller (it not include the library

Advantages of dynamic linking • The executable is smaller (it not include the library information explicitly), • When the library is changed, the code that references it does not usually need to be recompiled. • The executable accesses the. DLL at run time; therefore, multiple codes can access the same. DLL at the same time (saves memory)

Shortcomings of dynamic linking • Performance hit ~10% – Need to load shared objects

Shortcomings of dynamic linking • Performance hit ~10% – Need to load shared objects (once) – Need to resolve addresses (once or every time) • What if the necessary dynamic library is missing? • Could have the library, but wrong version

Unix Dynamic Objects (. so) • Host library • Target library • Compiler Options

Unix Dynamic Objects (. so) • Host library • Target library • Compiler Options (cont) – -nostartfiles skip linking of standard start files, like /usr/lib/crt[0, 1]. o, /usr/lib/crti. o, etc. – -static link only to static (. a=archive) libraries – -shared if possible, prefer shared libraries over static • Linker Options (gcc gives unknown options to linker) – -l lib (default naming convention liblib. a) – -L lib path (in addition to default /usr/lib and /lib) – -s strip final executable code of symbol and relocation tables

DLL: dynamic link libraries • • Static Windows libraries are. LIB Implicit linking Statically

DLL: dynamic link libraries • • Static Windows libraries are. LIB Implicit linking Statically linked to import library Checks which DLLs in memory & loads missing ones • Have to map DLLs into program address space • Explicit linking – prog makes explicit runtime to bind to DLL, then – makes a call per procedure to determine address – then calls procedure.