📄 autobook_78.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: Using Convenience Libraries</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Using Convenience Libraries"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Using Convenience Libraries"><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="SEC78"></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_77.html#SEC77" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Inter-library Dependencies" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_79.html#SEC79" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: Executing Uninstalled Binaries" 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.2 Using Convenience Libraries </H3><!--docid::SEC78::--><P>To rebuild <TT>`libtrim'</TT> as a convenience library (see section <A HREF="autobook_74.html#SEC74">Creating Convenience Libraries</A>),use the following commands:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ rm hello *.la$ lshello.c hello.lo hello.o main.c trim.c trim.lo trim.o$ libtool gcc -o libtrim.la trim.lorm -fr .libs/libtrim.la .libs/libtrim.* .libs/libtrim.*ar cru .libs/libtrim.al trim.loranlib .libs/libtrim.alcreating libtrim.la(cd .libs && rm -f libtrim.la && ln -s ../libtrim.la libtrim.la)</FONT></pre></td></tr></table></P><P>Then, rebuild <TT>`libhello'</TT>, with an inter-library dependency on<TT>`libtrim'</TT> (see section <A HREF="autobook_77.html#SEC77">10.4.1 Inter-library Dependencies</A>), like this:</P><P><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>$ libtool gcc -rpath `pwd`/_inst -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.rm -fr .libs/libhello.laxmkdir .libs/libhello.laxrm -fr .libs/libhello.lax/libtrim.almkdir .libs/libhello.lax/libtrim.al(cd .libs/libhello.lax/libtrim.al && ar x /tmp/./.libs/libtrim.al)/opt/gcc-lib/hp821/2.7.0/ld -b +h libhello.sl.0 +b /tmp/hello/_inst \-o .libs/libhello.sl.0.0 hello.lo .libs/libhello.lax/libtrim.al/trim.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)rm -fr .libs/libhello.laxmkdir .libs/libhello.laxrm -fr .libs/libhello.lax/libtrim.almkdir .libs/libhello.lax/libtrim.al(cd .libs/libhello.lax/libtrim.al && ar x /tmp/hello/./.libs/libtrim.al)ar cru .libs/libhello.a hello.o .libs/libhello.lax/libtrim.al/trim.loranlib .libs/libhello.arm -fr .libs/libhello.lax .libs/libhello.laxcreating 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>Compare this to the previous example of building <TT>`libhello'</TT> and you can see that things are rather different. On HP-UX, partiallinking is not known to work, so <CODE>libtool</CODE> extracts the objectsfrom the convenience library, and links them directly into<TT>`libhello'</TT>. That is, <TT>`libhello'</TT> is comprised of its ownobjects <EM>and</EM> the objects in <TT>`libtrim'</TT>. If <TT>`libtrim'</TT> had had any dependencies, <TT>`libhello'</TT> would have inherited them too.This technique is especially useful for grouping source files intosubdirectories, even though all of the objects compiled in thesubdirectories must eventually reside in a big library: compile thesources in each into a convenience library, and in turn linkall of these into a single library which will then contain all of theconstituent objects and dependencies of the various conveniencelibraries.</P><P>When you relink the <CODE>hello</CODE> executable, notice that<TT>`libtrim'</TT> is <STRONG>not</STRONG> linked, because the <TT>`libtrim'</TT>objects are already present in <TT>`libhello'</TT>:</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 \-Wl,+b -Wl,/tmp/intro-hello/.libs:/usr/local/libcreating hello$ ./helloHello, World!</FONT></pre></td></tr></table></P><P><A NAME="Executing Uninstalled Binaries"></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 + -