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>
<B> <A NAME="tex2html3578"
HREF="node14.html">Contents</A></B>
<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>
<B> <A NAME="tex2html3578"
HREF="node14.html">Contents</A></B>
<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>
|