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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
<!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>Tracking Down Problems</TITLE>
<META NAME="description" CONTENT="Tracking Down Problems">
<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="previous" HREF="node194.html">
<LINK REL="up" HREF="node193.html">
<LINK REL="next" HREF="node196.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html3635"
HREF="node196.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html3629"
HREF="node193.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html3625"
HREF="node194.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html3631"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html3633"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html3636"
HREF="node196.html">SIDL Library Issues</A>
<B> Up:</B> <A NAME="tex2html3630"
HREF="node193.html">Dynamic vs. Static Linking</A>
<B> Previous:</B> <A NAME="tex2html3626"
HREF="node194.html">Linkers and Position Independent</A>
<B> <A NAME="tex2html3632"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html3634"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION04132000000000000000"></A>
<A NAME="11198"></A><A NAME="11199"></A>
<BR>
Tracking Down Problems
</H2>
<P>
When tracking down problems with Babel libraries, to UNIX tools <TT><B>nm</B></TT> and
<TT><B>ldd</B></TT> are your friends. <TT><B>nm</B></TT> will print the list of linker symbols
in a file, including details such as whether the symbol is defined or not.
<TT><B>ldd</B></TT> lists dynamic dependencies of a shared libraries or executables, indicating
where it will look for these symbols when loaded.
<P>
Recall the Fortran hello world example in section <A HREF="node190.html#ss:compilebootcamp">14.2.1</A>. Even though
we may think this is all done with static linking, using these tools we find out the truth.
<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>ldd a.out</B></TT>
<BR> libg2c.so.0 => /usr/local/gcc/3.2/lib/libg2c.so.0 (0x400180000)
<BR> libm.so.6 => /lib/i686/libm.so.6 (0x4004a000)
<BR> libgcc_s.so.1 => //usr/local/gcc/3.2/lib/libgcc_s.so.1 (0x4006d000)
<BR> libc.so.6 => /lib/i686/libc.so.6 (0x40076000)
<BR> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
<BR>
</TT></BLOCKQUOTE>
<P>
Here, we clearly see that five libraries are shared libraries that will be loaded
after the executable is invoked, but before we get to the main program.
Some of these libraries make sense: <TT>libg2c</TT> is a Fortran to C support library,
<TT>libc</TT> is the C standard library, but why is <TT>libm</TT> listed... its a
library of transcendental functions (e.g. sin(), cos()) why would it be included?
The answer becomes obvious when using ldd on <TT>libg2c</TT>. The fortran support
library has dependencies on the math library, so our FORTRAN executable inherits
that dependency too.
<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>nm a.out | grep ' U '</B></TT>
<BR> U __cxa_atexit@@GLIBC_2.1.3
<BR> U __libc_start_main@@GLIBC_2.0
<BR> U do_lio
<BR> U e_wsle
<BR> U exit@@GLIBC_2.0
<BR> U f_exit
<BR> U f_init
<BR> U f_setarg
<BR> U f_setsig
<BR> U s_stop
<BR> U s_wsle
</TT></BLOCKQUOTE>
<P>
<TT><B>nm</B></TT> (and grep) shows us 11 symbols that are were left undefined in our
final hello world application. A little more nm|greping about will help us find that
symbols starting with <TT>f_</TT> are defined in libg2c.
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html3635"
HREF="node196.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html3629"
HREF="node193.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html3625"
HREF="node194.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html3631"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html3633"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html3636"
HREF="node196.html">SIDL Library Issues</A>
<B> Up:</B> <A NAME="tex2html3630"
HREF="node193.html">Dynamic vs. Static Linking</A>
<B> Previous:</B> <A NAME="tex2html3626"
HREF="node194.html">Linkers and Position Independent</A>
<B> <A NAME="tex2html3632"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html3634"
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>
|