📄 autobook_77.html
字号:
<HTML><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><!-- Created on September, 12 2004 by texi2html 1.64 --><!-- Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others.Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> --><HEAD><TITLE>Autoconf, Automake, and Libtool: Inter-library Dependencies</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Inter-library Dependencies"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Inter-library Dependencies"><META NAME="resource-type" CONTENT="document"><META NAME="distribution" CONTENT="global"><META NAME="Generator" CONTENT="texi2html 1.64"><script language="Javascript"><!-- // Check the browser version. function checkVersion() { if (navigator.appVersion.charAt(0)>=3) return true; if (navigator.appVersion.charAt(0)>=4) return true; else return false; } if (checkVersion()) { homeon = new Image(); homeon.src = "homeon.png"; homeoff = new Image(); homeoff.src = "home.png"; tocon = new Image(); tocon.src = "tocon.png"; tocoff = new Image(); tocoff.src = "toc.png"; indexon = new Image(); indexon.src = "indexon.png"; indexoff = new Image(); indexoff.src = "index.png"; helpon = new Image(); helpon.src = "helpon.png"; helpoff = new Image(); helpoff.src = "help.png"; backon = new Image(); backon.src = "backon.png"; backoff = new Image(); backoff.src = "back.png"; forwardon = new Image(); forwardon.src = "forwardon.png"; forwardoff = new Image(); forwardoff.src = "forward.png"; prevon = new Image(); prevon.src = "prevon.png"; prevoff = new Image(); prevoff.src = "prev.png"; nexton = new Image(); nexton.src = "nexton.png"; nextoff = new Image(); nextoff.src = "next.png"; upon = new Image(); upon.src = "upon.png"; upoff = new Image(); upoff.src = "up.png"; } function img_act(imgName) { if (checkVersion()) { imgOn = eval(imgName + "on.src"); document [imgName].src = imgOn; } } function img_inact(imgName) { if (checkVersion()) { imgOff = eval(imgName + "off.src"); document [imgName].src = imgOff; } }// --></SCRIPT></HEAD><BODY LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#6688AA" VLINK="#336688" ALINK="#808080"><A NAME="SEC77"></A><TABLE BORDER=0 CELLPADDING=0 CELLSPACING=10><TR VALIGN="TOP"><TD ALIGN="MIDDLE" WIDTH=50 BGCOLOR="#e6e6e6"><TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_76.html#SEC76" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Linking a Library" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_78.html#SEC78" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Using Convenience Libraries" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_79.html#SEC79" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: Executing Uninstalled Binaries" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_76.html#SEC76" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: Linking a Library" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_79.html#SEC79" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: Executing Uninstalled Binaries" ALIGN="MIDDLE" NAME="forward"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook.html#SEC_Top" onMouseover="img_act('home')" onMouseout="img_inact('home')"><IMG SRC="home.png" BORDER="0" ALT="Top: Autoconf, Automake, and Libtool" ALIGN="MIDDLE" NAME="home"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_toc.html#SEC_Contents" onMouseover="img_act('toc')" onMouseout="img_inact('toc')"><IMG SRC="toc.png" BORDER="0" ALT="Contents: Table of Contents" ALIGN="MIDDLE" NAME="toc"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_285.html#SEC285" onMouseover="img_act('index')" onMouseout="img_inact('index')"><IMG SRC="index.png" BORDER="0" ALT="Index: Index" ALIGN="MIDDLE" NAME="index"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_abt.html#SEC_About" onMouseover="img_act('help')" onMouseout="img_inact('help')"><IMG SRC="help.png" BORDER="0" ALT="About: About this document" ALIGN="MIDDLE" NAME="help"></A></TD></TR></TABLE></TD><TD ALIGN="LEFT"><H3> 10.4.1 Inter-library Dependencies </H3><!--docid::SEC77::--><P><CODE>libtool</CODE>'s inter-library dependency support will use the native implementation if there is one available. If there is no nativeimplementation, or if the native implementation is broken or incomplete, <CODE>libtool</CODE> will use an implementation of its own.</P><P>To build <TT>`libtrim'</TT> as a standard Libtool library (see section <A HREF="autobook_70.html#SEC70">10.2 The Libtool Library</A>), as follows:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ rm hello *.a *.o$ lshello.c main.c trim.c$ libtool gcc -c trim.crm -f .libs/trim.logcc -c -fPIC -DPIC trim.c -o .libs/trim.logcc -c trim.c -o trim.o >/dev/null 2>&1mv -f .libs/trim.lo trim.lo$ libtool gcc -rpath /usr/local/lib -o libtrim.la trim.lorm -fr .libs/libtrim.la .libs/libtrim.* .libs/libtrim.*/opt/gcc-lib/hp821/2.7.0/ld -b +h libtrim.sl.0 +b /usr/local/lib \-o .libs/libtrim.sl.0.0 trim.lo(cd .libs && rm -f libtrim.sl.0 && ln -s libtrim.sl.0.0 libtrim.sl.0)(cd .libs && rm -f libtrim.sl && ln -s libtrim.sl.0.0 libtrim.sl)ar cru .libs/libtrim.a trim.oranlib .libs/libtrim.acreating libtrim.la(cd .libs && rm -f libtrim.la && ln -s ../libtrim.la libtrim.la)</FONT></pre></td></tr></table></P><P>When you build <TT>`libhello'</TT>, you can specify the libraries it depends on at the command line, like so:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ libtool gcc -c hello.crm -f .libs/hello.logcc -c -fPIC -DPIC hello.c -o .libs/hello.logcc -c hello.c -o hello.o >/dev/null 2>&1mv -f .libs/hello.lo hello.lo$ libtool gcc -rpath /usr/local/lib -o libhello.la hello.lo libtrim.larm -fr .libs/libhello.la .libs/libhello.* .libs/libhello.**** Warning: inter-library dependencies are not known to be supported.*** All declared inter-library dependencies are being dropped.*** The inter-library dependencies that have been dropped here will be*** automatically added whenever a program is linked with this library*** or is declared to -dlopen it./opt/gcc-lib/hp821/2.7.0/ld -b +h libhello.sl.0 +b /usr/local/lib \-o .libs/libhello.sl.0.0 hello.lo(cd .libs && rm -f libhello.sl.0 && ln -s libhello.sl.0.0 libhello.sl.0)(cd .libs && rm -f libhello.sl && ln -s libhello.sl.0.0 libhello.sl)ar cru .libs/libhello.a hello.oranlib .libs/libhello.acreating libhello.la(cd .libs && rm -f libhello.la && ln -s ../libhello.la libhello.la)$ lshello.c hello.o libtrim.la trim.c trim.ohello.lo libhello.la main.c trim.lo</FONT></pre></td></tr></table></P><P>Although, on HP-UX, <CODE>libtool</CODE> warns that it doesn't knowhow to use the native inter-library dependency implementation, it willtrack the dependencies and make sure they are added to the final linkline, so that you only need to specify the libraries that you usedirectly.</P><P>Now, you can rebuild <TT>`hello'</TT> exactly as in the earlier example(see section <A HREF="autobook_75.html#SEC75">10.3 Linking an Executable</A>), as in:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ libtool gcc -o hello main.c libhello.lalibtool: link: warning: this platform does not like uninstalledlibtool: link: warning: shared librarieslibtool: link: hello will be relinked during installationgcc -o .libs/hello main.c /tmp/intro-hello/.libs/libhello.sl \/tmp/intro-hello/.libs/libtrim.sl \-Wl,+b -Wl,/tmp/intro-hello/.libs:/usr/local/libcreating hello$ ./helloHello, World!</FONT></pre></td></tr></table></P><P>Notice that even though you only specified the <TT>`libhello.la'</TT>library at the command line, <CODE>libtool</CODE> remembers that<TT>`libhello.sl'</TT> depends on <TT>`libtrim.sl'</TT> and links that librarytoo. </P><P>You can also link a static executable, and the dependencies are handledsimilarly:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ libtool gcc -o hello-again -static main.c libhello.lagcc -o hello main.c ./.libs/libhello.a /tmp/intro-hello/.libs/libtrim.a$ ./hello-againHello, World!</FONT></pre></td></tr></table></P><P>For your own projects, provided that you use <CODE>libtool</CODE>, and thatyou specify the libraries you wish to link using the <SAMP>`.la'</SAMP>pseudo-libraries, these dependencies can be nested as deeply as youlike. You can also register dependencies on native libraries, thoughyou will of course need to specify any dependencies that the nativelibrary itself has at the same time.</P><P><A NAME="Using Convenience Libraries"></A></TR></TABLE><BR> <FONT SIZE="-1">This document was generatedby <I>Gary V. Vaughan</I> on <I>September, 12 2004</I>using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html"><I>texi2html</I></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -