File: node191.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 (126 lines) | stat: -rw-r--r-- 5,169 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
<!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>Circular Dependencies and Single-Pass Linkers</TITLE>
<META NAME="description" CONTENT="Circular Dependencies and Single-Pass Linkers">
<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="node192.html">
<LINK REL="previous" HREF="node190.html">
<LINK REL="up" HREF="node189.html">
<LINK REL="next" HREF="node192.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html3581"
  HREF="node192.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3575"
  HREF="node189.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3569"
  HREF="node190.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3577"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3579"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3582"
  HREF="node192.html">IOR as single point</A>
<B> Up:</B> <A NAME="tex2html3576"
  HREF="node189.html">Grouping compiled assets into</A>
<B> Previous:</B> <A NAME="tex2html3570"
  HREF="node190.html">Basics of Compilation and</A>
 &nbsp; <B>  <A NAME="tex2html3578"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3580"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H2><A NAME="SECTION04122000000000000000"></A>
<A NAME="11173"></A><A NAME="11174"></A>
<A NAME="11175"></A>
<BR>
Circular Dependencies and Single-Pass Linkers
</H2>

<P>
Almost all linkers are single pass.  This means that when linking an executable, 
linkers will run through the list of libraries exactly once trying to resolve symbols
Ever get libraries listed in the wrong order and an executable wouldn't get built?
Ever have to list the same libraries over and over again to build an executable?
These are both side-effects of single pass linkers.  The symbols in question
are essentially jumps in the instruction code corresponding to subroutines that
are defined elsewhere.  When linking a final executable, all these symbols
need to be resolved. When linking libraries, multiple undefined symbols
are commonplace.

<P>
Having to list libraries over and over again in the link line when compiling
the final executable typically indicates a circular dependency between libraries.
Circular dependencies are much better kept within a single library.
Even though linkers are single-pass between libraries, they exhaustively search within them.

<P>
This is important because all the files generated by Babel have a circular dependency 
in each Babel type.  The stub makes calls on the IOR, the IOR calls the Skel, the Skel 
calls the Impl, but the Impl also may make calls on a Stub.  Just like C++ has a <TT>this</TT>
object, and Python has a <TT>self</TT>, Babel objects have a stub for them to 
call methods on themselves and dispatch properly through Babel's IOR layer.

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html3581"
  HREF="node192.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3575"
  HREF="node189.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3569"
  HREF="node190.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3577"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3579"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3582"
  HREF="node192.html">IOR as single point</A>
<B> Up:</B> <A NAME="tex2html3576"
  HREF="node189.html">Grouping compiled assets into</A>
<B> Previous:</B> <A NAME="tex2html3570"
  HREF="node190.html">Basics of Compilation and</A>
 &nbsp; <B>  <A NAME="tex2html3578"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3580"
  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>