⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 autobook_50.html

📁 Autoconf使用手册
💻 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: Fallback Function Implementations</TITLE><META NAME="description" CONTENT="Autoconf, Automake, and Libtool: Fallback Function Implementations"><META NAME="keywords" CONTENT="Autoconf, Automake, and Libtool: Fallback Function Implementations"><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="SEC50"></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_49.html#SEC49" onMouseover="img_act('prev')" onMouseout="img_inact('prev')"><IMG SRC="prev.png" BORDER="0" ALT="Back: Function Definitions" ALIGN="MIDDLE" NAME="prev"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_51.html#SEC51" onMouseover="img_act('next')" onMouseout="img_inact('next')"><IMG SRC="next.png" BORDER="0" ALT="Forward: K&#38;R Compilers" ALIGN="MIDDLE" NAME="next"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_51.html#SEC51" onMouseover="img_act('back')" onMouseout="img_inact('back')"><IMG SRC="back.png" BORDER="0" ALT="FastBack: K&#38;R Compilers" ALIGN="MIDDLE" NAME="back"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_45.html#SEC45" onMouseover="img_act('up')" onMouseout="img_inact('up')"><IMG SRC="up.png" BORDER="0" ALT="Up: GNU Autotools in Practice" ALIGN="MIDDLE" NAME="up"></A></TD></TR><TR VALIGN="TOP" ALIGN="LEFT"><TD VALIGN="MIDDLE" ALIGN="LEFT"><A HREF="autobook_52.html#SEC52" onMouseover="img_act('forward')" onMouseout="img_inact('forward')"><IMG SRC="forward.png" BORDER="0" ALT="FastForward: A Simple Shell Builders Library" 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> 9.1.5 Fallback Function Implementations </H3><!--docid::SEC50::--><P>Due to the huge number of Unix varieties in common use today, many ofthe C library functions that you take for granted on your preferreddevelopment platform are very likely missing from some of thearchitectures you would like your code to compile on.  Fundamentallythere are two ways to cope with this:</P><P><UL><LI>Use only the few library calls that are available everywhere.  Inreality this is not actually possible because there are two lowestcommon denominators with mutually exclusive APIs, one rooted in<FONT SIZE="-1">BSD</FONT> Unix (<SAMP>`bcopy'</SAMP>, <SAMP>`rindex'</SAMP>) and the other inSYSV Unix (<SAMP>`memcpy'</SAMP>, <SAMP>`strrchr'</SAMP>).  The only way to dealwith this is to define one API in terms of the other using thepreprocessor.  The newer POSIX standard deprecates many of the<FONT SIZE="-1">BSD</FONT> originated calls (with exceptions such as the<FONT SIZE="-1">BSD</FONT> socket API).  Even on non-POSIX platforms, therehas been so much cross pollination that often both varieties of a givencall may be provided,  however you would be wise to write your codeusing POSIX endorsed calls, and where they are missing, define themin terms of whatever the host platform provides.<P>This approach requires a lot of knowledge about various system librariesand standards documents, and can leave you with reams of preprocessorcode to handle the differences between APIS.  You will also needto perform a lot of checking in <TT>`configure.in'</TT> to figure out whichcalls are available.  For example, to allow the rest of your code to usethe <SAMP>`strcpy'</SAMP> call with impunity, you would need the following codein <TT>`configure.in'</TT>:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>AC_CHECK_FUNCS(strcpy bcopy)</pre></td></tr></table></P><P>And the following preprocessor code in a header file that is seen byevery source file:</P><P><TABLE width=100%><tr><td>&nbsp;</td><td class=example bgcolor=#6688aa><br><pre>#if !HAVE_STRCPY#  if HAVE_BCOPY#    define strcpy(dest, src)   bcopy (src, dest, 1 + strlen (src))#  else /* !HAVE_BCOPY */     error no strcpy or bcopy#  endif /* HAVE_BCOPY */#endif /* HAVE_STRCPY */</pre></td></tr></table></P><P><LI>Alternatively you could provide your own fallback implementations offunction calls you know are missing on some platforms.  In practice youdon't need to be as knowledgeable about problematic functions when usingthis approach.  You can look in GNU libiberty<A NAME="DOCF9" HREF="autobook_fot.html#FOOT9">(9)</A> or Fran&ccedil;oisPinard's libit project<A NAME="DOCF10" HREF="autobook_fot.html#FOOT10">(10)</A> to see for whichfunctions other GNU developers have needed to implement fallbackcode.  The libit project is especially useful in this respect as itcomprises canonical versions of fallback functions, and suitableAutoconf macros assembled from across the entire GNU project.  Iwon't give an example of setting up your package to use this approach,since that is how I have chosen to structure the project described inthis chapter.</UL><P>Rather than writing code to the lowest common denominator of systemlibraries, I am a strong advocate of the latter school of thought in themajority of cases.  As with all things it pays to take a pragmaticapproach;  don't be afraid of the middle ground -- weigh the options ona case by case basis.</P><P><A NAME="K&#38;R Compilers"></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 + -