File: node194.html

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (133 lines) | stat: -rw-r--r-- 5,603 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Linkers and Position Independent Code (PIC)</TITLE>
<META NAME="description" CONTENT="Linkers and Position Independent Code (PIC)">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="users_guide.css">

<LINK REL="next" HREF="node195.html">
<LINK REL="previous" HREF="node193.html">
<LINK REL="up" HREF="node193.html">
<LINK REL="next" HREF="node195.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html3623"
  HREF="node195.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3617"
  HREF="node193.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3611"
  HREF="node193.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3619"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3621"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3624"
  HREF="node195.html">Tracking Down Problems</A>
<B> Up:</B> <A NAME="tex2html3618"
  HREF="node193.html">Dynamic vs. Static Linking</A>
<B> Previous:</B> <A NAME="tex2html3612"
  HREF="node193.html">Dynamic vs. Static Linking</A>
 &nbsp; <B>  <A NAME="tex2html3620"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3622"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H2><A NAME="SECTION04131000000000000000"></A><A NAME="ss:pic"></A><A NAME="11190"></A>
<BR>
Linkers and Position Independent Code (PIC)
</H2>
In a static library, the linker simply copies needed compilation units 
from the library to the executable.  The static library can subsequently
be deleted with no adverse affects to the executable.  This also causes
common libraries to be duplicated in every executable that links against
it, and for the resulting executables to be quite large.

<P>
In a shared library, the linker simply inserts in the executable enough
information to find the library and load it when the executable is invoked.
This typically happens before the program ever gets to <TT>main()</TT>.
This keeps executables small and allows commonly used libraries to be
reused without copying, but it also means that the executable can fail
if the library is renamed, moved, deleted, or even if the user's
environment changes sufficiently.  

<P>
A necessary (but not sufficient) condition for shared libraries to work is 
that all the compilation units (<TT>*.o</TT>)
contained must be explicitly compiled as <SPAN  CLASS="textit">position independent code</SPAN>(PIC).
Position independent code has an added level of indirection in critical 
areas since details (such as addresses to jump to in subroutine calls)
are not known until runtime.  Even though shared libraries are very useful, 
PIC causes a small but measurable degradation in performance, making static
linked libraries with non-PIC code a viable option for performance-critical
situations.

<P>
A dynamic-linked library is a shared library with one added feature, 
it can be loaded explicitly by the user at runtime by passing the string
name into <TT>dlopen()</TT>.  Dynamic-linked libraries (DLL's) also require
compilation as PIC, though many compilers (including GCC) have special 
commands for each<A NAME="tex2html48"
  HREF="footnode.html#foot11280"><SUP><SPAN CLASS="arabic">15</SPAN>.<SPAN CLASS="arabic">1</SPAN></SUP></A>.

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html3623"
  HREF="node195.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3617"
  HREF="node193.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3611"
  HREF="node193.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3619"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3621"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3624"
  HREF="node195.html">Tracking Down Problems</A>
<B> Up:</B> <A NAME="tex2html3618"
  HREF="node193.html">Dynamic vs. Static Linking</A>
<B> Previous:</B> <A NAME="tex2html3612"
  HREF="node193.html">Dynamic vs. Static Linking</A>
 &nbsp; <B>  <A NAME="tex2html3620"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3622"
  HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>