\documentclass[letterpaper]{article}
\nonstopmode
\akai
\usepackage{linuxdoc-sgml}
\usepackage{qwertz}
\usepackage{url}
\usepackage[latin1]{inputenc}
\usepackage{t1enc}
\usepackage[english]{babel}
\usepackage{epsfig}
\usepackage{null}
\def\addbibtoc{
\addcontentsline{toc}{section}{\numberline{\mbox{}}\relax\bibname}
}%end-preamble
\setcounter{page}{1}
\title{Glibc 2 HOWTO ÖÐÎÄ°æ}
\author{Ô­×÷ Eric Green, {\ttfamily ejg3@cornell.edu}\\ 
ÒëÕß Allex Juang, {\ttfamily allex@ms2.accmail.com}}
\date{1.5 °æ, 1998Äê 2ÔÂ 8ÈÕ}
\abstract{Õâ·Ý glibc 2 HOWTO ÄÚÈÝ°üÀ¨ÔÚ Linux ÏµÍ³ÉÏ°²×°ÓëÊ¹ÓÃµÚ¶þ°æ GNU C Library¡£}


\begin{document}
\maketitle
\tableofcontents

\section{¼ò½é}






\subsection{¹Øì¶ glibc 2}



Glibc 2 ÊÇ×îÐÂ°æµÄ GNU C º¯Ê½¿â¡£
ËüÄ¿Ç°²»ÐèÐÞ¸Ä¾Í¿ÉÒÔÔÚ GNU Hurd£¬Linux i386£¬ m68k£¬ ÒÔ¼° alpha ÏµÍ³ÉÏÖ´ÐÐ£¬
¶ø 2.1 °æÖÐ½«¼ÓÈë¶Ô Linux PowerPC£¬ MIPS£¬ Sparc£¬ Sparc 64 Óë Arm
µÈÏµÍ³µÄÖ§Ô®¡£Î´À´½«¼ÓÈë¶ÔÆäËü¼Ü¹¹¼°×÷ÒµÏµÍ³µÄÖ§Ô®¡£

ÔÚ Linux ÉÏ£¬glibc 2 ÊÇÖ÷Òª°æ±¾Îª 6 µÄ libc£¬Ò²¾ÍÊÇ Linux libc 5 µÄáá¼ÌÕß¡£
Linux libc µÄ·¢Õ¹ÈËÔ±ÏëÒÔ´ËÖð½¥È¡´ú libc 5¡£
¾Í 2.0.6 À´¿´£¬glibc ÒÑ¾ßÓÐ³ÉÊì²úÆ·µÄÆ·ÖÊ¡£
Glibc 2.1 °æ (ÔÚ²»¾ÃµÄ½«À´) ½«¼ÓÈë¸ü¶àµÄ¹¦ÄÜ£¬
²¢ÒÆÖ²µ½¸ü¶àÏµÍ³ÉÏ£¬×ã¹»µ±×÷Ö÷Á÷Ê¹ÓÃ¡£

Glibc 2 ÓÐÈý¸öÑ¡ÔñÐÔµÄ¸½¼ÓÌ×¼þ£º
\begin{description}
\item[Crypt] \mbox{}

UFC-crypt ¼ÓÃÜÌ×¼þ¡£ ÓÉì¶³ö¿ÚÏÞÖÆËùÒÔÒª·ÖÀë³öÀ´¡£

\item[LinuxThreads] \mbox{}

Posix 1003.1c {\tt\char`\"}pthread{\tt\char`\"} ½éÃæµÄÊµ×÷¡£

\item[Locale data] \mbox{}

°üº¬ÖÆÔìÊ¹ÓÃ glibc µÄ internationalization ¹¦ÄÜËùÐè locale
×ÊÁÏµµ°¸µÄ×ÊÁÏ¡£

\end{description}


Ç¿ÁÒ½¨Òé°²×° Cryt Óë LinuxThreads ÕâÁ½¸ö¸½¼ÓÌ×¼þ£¬
Èç¹û²»°²×°µÄ»°£¬ÓÐ¿ÉÄÜ»áÓëÆäËüÏµÍ³ÉÏµÄº¯Ê½¿âÔì³É²»ÏàÈÝµÄÇéÐÎ¡£
(¼ÙÈçÄã²»ÏëÊ¹ÓÃÕâÁ½¸ö¸½¼ÓÌ×¼þµÄ»°£¬
ÄÇÄã±ØÐëÔÚÖ´ÐÐ configure Ê±¼ÓÉÏ --disable-sanity-checks µÄÑ¡Ïî)




\subsection{¹Øì¶Õâ·ÝÎÄ¼þ}



Õâ·ÝÎÄ¼þº­¸ÇÈçºÎÔÚ Linux ÏµÍ³ÉÏ°²×° glib 2£¬
ÊÊÓÃ¶ÔÏóÊÇÄÇÐ©ÔÚ intel-based »úÆ÷ÉÏÊ¹ÓÃ libc 5 µÄÊ¹ÓÃÕß¡£
µ«ÊÇ¶Ôì¶ÆäËüÏµÍ³ÒÔ¼°ÆäËü²»Í¬º¯Ê½¿â (Èç glibc 1) µÄÊ¹ÓÃÕß£¬
Ö»Òª½«Õâ·ÝÎÄ¼þÖÐ³öÏÖµÄµµÃûÒÔ¼°ÏµÍ³¼Ü¹¹Ãû³Æ×÷ÊÊµ±µÄ´ú»»£¬
Ó¦¸ÃÒ²¿ÉµÃµ½Ð©°ïÖú¡£

Õâ·Ý HOWTO µÄ×îÐÂ°æ±¾µÄ¿½±´¿ÉÔÚ
\nameurl{http://sunsite.unc.edu/LDP}{Linux Documentation Project}
»òÊÇ
\nameurl{http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html}{}
ÕÒµ½¡£




\subsection{Õâ·ÝÎÄ¼þµÄ×îÐÂ¸Ä±ä}



1.5 Óë 1.4 °æµÄ²î±ð£º
\begin{itemize}
\item ÓÉ Ed Bailey ¼ÓÈëË÷Òý
\item ÎÒµÄÐÂµç×ÓÓÊ¼þÐÅÏäÎ»Ö·
\end{itemize}


1.4 Óë 1.3 °æµÄ²î±ð£º
\begin{itemize}
\item ½«Ä¿Ç°×´Ì¬ÓÉÊµÑéÐÔ¸Ä³É³ÉÊì²úÆ·¡£
\item ¸üÐÂ·¢Õ¹ÖÐµÄÒÆÖ²ÁÐ±í¡£
\item ¸üÐÂ×îÐÂ°æµ½ 2.0.6¡£
\end{itemize}





\section{Ñ¡ÔñÄãµÄ°²×°·½Ê½}



ÓÐÐí¶àÖÖ·½Ê½°²×° glibc£¬Äã¿ÉÒÔ°²×°³ÉÒ»¸ö²âÊÔÓÃµÄº¯Ê½¿â£¬
½«Ä¿Ç°Ê¹ÓÃµÄº¯Ê½¿âµ±×÷ÊÇÄÚ¶¨µÄ£¬
È»ááÔÚ±àÒë³ÌÊ½µÄÊ±ºòÓÃ²»Í¬µÄÑ¡ÏîÀ´ÊÔÓÃÐÂµÄº¯Ê½¿â¡£
ÓÃÕâÖÖ°²×°·½Ê½ÒÔáá¿ÉÒÔÇáÒ×µÄÒÆ³ý glibc¡£
(ËäÈ»ÓÃ glibc Á¬½áµÄ³ÌÊ½ÔÚÒÆ³ý glibc áá¶¼½«²»ÄÜÊ¹ÓÃ)
ÁíÍâ£¬ÓÃÕâÖÖ·½Ê½°²×°£¬Äã±ØÐëÓÉÔ­Ê¼ÂëÖØÐÂ±àÒë£¬
²¢Ã»ÓÐ binary distribution ¿ÉÒÔ°²×°³É²âÊÔµÄº¯Ê½¿â¡£
ÕâÑùµÄ°²×°Çë²ÎÕÕ\ref{test-install} {(°²×°³É²âÊÔÓÃµÄº¯Ê½¿â)}¡£

Õâ·ÝÎÄ¼þÖÐËùËµµÄÁíÒ»ÖÖ·½Ê½ÔòÊÇ½« glibc °²×°³ÉÖ÷Òªº¯Ê½¿â¡£
ËùÓÐÐÂ±àÒëµÄ³ÌÊ½¶¼½«»áÊ¹ÓÃ glibc£¬
µ«ÊÇÄãÒ²¿ÉÒÔÔÚ±àÒëÊ±ÓÃ²»Í¬µÄÑ¡Ïî¶ø½«³ÌÊ½Á¬½áµ½¾ÉµÄº¯Ê½¿â¡£
Äã¿ÉÒÔÖ±½Ó°²×°ÒÑ¾­±àÒëºÃµÄ°æ±¾£¬Ò²¿ÉÒÔ×Ô¼º±àÒëº¯Ê½¿â¡£
¼ÙÈçÏë¸ü¸Ä×î¼Ñ»¯»òÊÇ×éÌ¬Ñ¡Ïî£¬
»òÊÇÏë¼ÓÈëÒÑ±àÒëºÃµÄ°æ±¾ÖÐÎ´Ö§Ô®µÄ add-on µÄ»°£¬
ÄÇÄã±ØÐèÈ¡µÃÔ­Ê¼Âë²¢ÇÒ×Ô¼º±àÒë£¬Õâ¸ö°²×°µÄ¹ý³ÌÇë²ÎÕÕ
\ref{primary-install} {(°²×°³ÉÖ÷ÒªµÄ C º¯Ê½¿â)}

Frodo Looijaard ÃèÊöÁËÁíÒ»ÖÖ glibc µÄ°²×°·½Ê½¡£
ËûµÄ·½·¨ÊÇ½« glibc °²×°³É´ÎÒªµÄº¯Ê½¿â£¬
È»ááÉè¶¨½»²æ±àÒëÆ÷ (cross compiler) À´Ê¹ÓÃ glibc¡£
Õâ¸ö·½Ê½±ÈÆðÕâ·ÝÎÄ¼þÖÐµÄ²âÊÔ°²×°Òª¸´ÔÓµÄ¶à£¬µ«ÊÇ±È½ÏÈÝÒ×Á¬½áµ½ glibc¡£
Õâ¸ö·½·¨ÔÚËûµÄ
\nameurl{http://huizen.dds.nl/~frodol/glibc/}{Installing glibc-2 on Linux}
ÎÄ¼þÖÐËµÃ÷¡£

¼ÙÈçÄãÏÖÔÚÊ¹ÓÃµÄÊÇ Debian 1.3£¬
µ«ÊÇ²»ÏëÎªÁË glibc ¶øÉý¼¶µ½²»ÎÈ¶¨µÄ°æ±¾£¬
ÄÇ÷á
\nameurl{http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html}{Debian libc5 to libc6 Mini-HOWTO}
»á¸æËßÄãÈçºÎÊ¹ÓÃ Debian µÄ package À´Éý¼¶¡£

¼ÙÈçÄãÒª°Ñ glibc 2 °²×°µ½Ò»ÖØÒªµÄÏµÍ³ÉÏ£¬
ÄÇÒ²ÐíÄãÓ¦Ê¹ÓÃ²âÊÔµÄ°²×°£¬»òÊÇÔÚ±¸ÓÃÏµÍ³ÉÏÊÔÊÔ¿´¡£
¼´Ê¹Ã»ÓÐ³ô¡õ£¬Ä³Ð©³ÌÊ½ÔÚ±àÒëÖ®Ç°ÈÔÈ»ÐèÒªÄ³Ð©ÐÞ¸Ä£¬
Ô­ÒòÔÚì¶Ä³Ð©º¯Ê½Ô­ÐÍÓëÐÍÌ¬ÉÏµÄ¸Ä±ä¡£




\section{È¡µÃº¯Ê½¿â\label{getting}}



Glibc 2 °üº¬ glibc package ÒÔ¼°Êý¸ö¸½¼ÓÌ×¼þ£º
LinuxThreads¡¢ Locale Óë Crypt£¬ Ô­Ê¼ÂëÔÚ
\begin{itemize}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz}{}
\end{itemize}


ÄãÐèÒª´óÔ¼ 150MB µÄ´Åµú¿Õ¼äÀ´×÷ÍêÈ«µÄ±àÒëÓë°²×°£¬
ºËÐÄº¯Ê½¿âµÄ»ù±¾°²×°´óÔ¼Òª 50MB¡£

2.0.6 ²¢Ã»ÓÐ binary µÄ package£¬
2.0.4 µÄ binary package Ö»ÓÐ i386 ¼° m68k µÄ°æ±¾£¬
¶ø 2.0.1 for alpha Ôò¿ÉÒÔÔÚÒÔÏÂµØ·½ÕÒµ½£º
\begin{itemize}
\item Intel x86:
\begin{itemize}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.gz}{}
\end{itemize}

\item Alpha:
\begin{itemize}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-linux.tar.gz}{}
\end{itemize}

\item m68k:
\begin{itemize}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.gz}{}
\item \nameurl{ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linux.bin.tar.gz}{}
\end{itemize}
\end{itemize}


ÓÉì¶ cypt Õâ¸ö¸½¼ÓÌ×¼þÓÐ³ö¿ÚÏÞÖÆ£¬·ÇÃÀ¹úÊ¹ÓÃÕßÇëµ½
\nameurl{ftp://ftp.ifi.uio.no/pub/gnu}{}
È¡µÃ¡£

Èç¹ûÄãÓÃµÄÊÇ RedHat distribution£¬
ÄÇÄã¿ÉÒÔ´Ó
\nameurl{ftp://ftp.redhat.com/pub/redhat/}{}
È¡µÃ glibc2 µÄ rpm¡£
ÔÚ RedHat distribution 5.0 ÖÐ£¬ glibc 2 ÊÇÖ÷ÒªµÄ C º¯Ê½¿â¡£

Èç¹ûÄãÓÃµÄÊÇ Debian distribution£¬ÄÇÄã¿ÉÒÔ´Ó
\nameurl{ftp://ftp.debian.org/debian/dists/unstable/main/}{}
È¡µÃ glibc2 µÄ package¡£µµÃûÊÇ libc6¡£
Glibc 2 Ä¿Ç°ÊÇ Debian ²âÊÔ°æµÄ»ù±¾ package£¬
µÈµ½ Debian 2.0 ³öÀ´Ö®áá½«»áÊÇÖ÷ÒªµÄ C º¯Ê½¿â¡£




\section{°²×°³É²âÊÔÓÃµÄº¯Ê½¿â\label{test-install}}



ÕâÒ»½ÚµÄÄÚÈÝÊÇ¹Øì¶ÈçºÎ½« glibc 2 °²×°³É²âÊÔÓÃµÄº¯Ê½¿â¡£
ËùÓÐ±àÒëµÄ³ÌÊ½¶¼Á¬½áµ½ÄãÄ¿Ç°µÄº¯Ê½¿â£¬
³ý·ÇÄã¸øÁËÄ³Ð©¶îÍâµÄ²ÎÊý²Å»áÁ¬½áµ½ÐÂµÄº¯Ê½¿â¡£
ÓÉì¶Â·¾¶±»±àÒëµ½Ä³Ð©µµ°¸ÖÐ£¬ÄãÐèÒªÓÉÔ­Ê¼ÂëÀ´°²×°Õâº¯Ê½¿â¡£




\subsection{±àÒëÓë°²×°}






\subsubsection{ÐèÇó}



\begin{itemize}
\item Ô¼ 150 MB µÄ´Åµú¿Õ¼ä
\item GNU make 3.75
\item gcc $>$= 2.7.2 (×îºÃÊÇ 2.7.2.1)
\item binutils 2.8.1 (¼ÙÈçÊÇ alpha Äã»¹ÐèÒª snapshot)
\item bash 2.0
\item autoconf 2.12 (¼ÙÈçÄã¸ü¶¯ÁË configure.in)
\item texinfo 3.11
\end{itemize}


ÔÚÒ»Ì¨°²×°ÓÐ 64MB ¼ÇÒäÌå i586@133 µÄ»úÆ÷ÉÏ£¬
±àÒëÍêÕûµÄº¯Ê½¿â (°üÀ¨¸½¼ÓÌ×¼þ) ´óÔ¼ÐëÒª 3 Ð¡Ê±¡£
¶øÔÚ i686@200 ÔòÐëÔ¼Ò»¸ö°ëÐ¡Ê±¡£




\subsubsection{½â¿ªÔ­Ê¼Âë}



Äã±ØÐèÓÉ archive ÖÐÈ¡³öÔ­Ê¼Âë¡£Èç´Ë²ÅÄÜ±àÒëËü£¬×îºÃµÄ·½Ê½ÈçÏÂ£º
\begin{tscreen}
\begin{verbatim}
 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz
 
\end{verbatim}
\end{tscreen}

Õâ»á½« linuxthreads¡¢ crypt Óë localedata µÈÄ¿Â¼·ÅÖÁ glibc-2.0.6 µÄÄ¿Â¼µ×ÏÂ£¬
Èç´Ë configure ²Å¿ÉÒÔÕÒµ½ÕâÐ© add-ons¡£




\subsubsection{Éè¶¨×éÌ¬}



ÔÚ glibc-2.0.6 µÄÄ¿Â¼µ×ÏÂ£¬½¨Á¢Ò»¸öÐÂµÄÄ¿Â¼ compile£¬²¢ÇÒ cd µ½ compile µ×ÏÂ£¬
ËùÓÐµÄ¹¤×÷¶¼»áÔÚÕâ¸öÄ¿Â¼ÖÐÍê³É£¬Õâ»á¼ò»¯ááÐøµÄÇå³ý¹¤×÷¡£
(·¢Õ¹ÕßËÆºõ²¢Î´ÈÃ 'make clean' ×÷µÃºÜºÃ)
\begin{tscreen}
\begin{verbatim}
 mkdir compile
 cd compile
 
\end{verbatim}
\end{tscreen}

Ö´ÐÐ {\ttfamily ../configure}¡£
ÒªÊ¹ÓÃ¸¸¼ÓÌ×¼þ£¬Äã±ØÐèÓÃ --enable-add-ons Ö¸¶¨£¬
ÀýÈçËµ --enable-add-ons=linuxthreads,crypt,localedata¡£

ÄãÒ²±ØÐèÖ¸¶¨Òª°²×°µÄÄ¿Â¼£¬/usr/i486-linuxglibc2 ÊÇ¸ö²»´íµÄÑ¡Ôñ£¬
ÕâÑùµÄ configure ÃüÁîÈçÏÂ£º
\begin{tscreen}
\begin{verbatim}
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2
 
\end{verbatim}
\end{tscreen}





\subsubsection{±àÒëÓë°²×°}



Òª±àÒëÓëÑéÖ¤£¬Ö´ÐÐ
\begin{tscreen}
\begin{verbatim}
 make
 make check
 
\end{verbatim}
\end{tscreen}

¼ÙÈç 'make check' ³É¹¦ÁË£¬°²×°º¯Ê½¿â£º
\begin{tscreen}
\begin{verbatim}
 make install
 
\end{verbatim}
\end{tscreen}





\subsection{¸üÐÂ dynamic loader}



\begin{enumerate}
\item ½¨Á¢Á¬½á£¬
´Ó {\ttfamily ld.so} µ½ {\ttfamily /lib/ld-linux.so.2}£º
\begin{tscreen}
\begin{verbatim}
 ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2
 
\end{verbatim}
\end{tscreen}

µ±Ò»¸öµµ°¸Á¬½áÊ±£¬Õâ¸öº¯Ê½¿âÊÇÎ¨Ò»Ò»¸öÎ»ÖÃ¹Ì¶¨µÄ¡£
µ±ÎÈ¶¨µÄ°æ±¾³öÏÖµÄÊ±ºò£¬
ÔÚ /lib Ê¹ÓÃÁ¬½áÒ²»áÊ¹µÃ½« glibc Éý¼¶ÎªÖ÷Òªº¯Ê½¿âÊ±¸üÎªÇáËÉ¡£
\item ÐÞ¸Ä {\ttfamily /etc/ld.so.conf}¡£
ÄãÐèÒªÔö¼ÓÐÂµÄº¯Ê½¿âËùÔÚµÄÂ·¾¶µ½µµ°¸µÄ×îáá£¬
ÕâÂ·¾¶Ó¦¸ÃÊÇ {\ttfamily $<$prefix$>$/lib}¡£
¼ÙÈçÓÃÒÔÉÏµÄÑ¡Ôñ¾ÍÓ¦¸ÃÊÇ {\ttfamily /usr/i486-linuxglibc2/lib}¡£
ÔÚÄãÐÞ¸ÄÁË {\ttfamily /etc/ld.so.conf} Ö®áá£¬Ö´ÐÐ£º
\begin{tscreen}
\begin{verbatim}
 ldconfig -v
 
\end{verbatim}
\end{tscreen}
\end{enumerate}





\subsection{Éè¶¨ gcc}



°²×°µÄ×îááÒ»²½ÊÇ¸üÐÂ {\ttfamily /usr/lib/gcc-lib}
ÒÔÊ¹ gcc ÖªµÀÈçºÎÊ¹ÓÃÐÂµÄº¯Ê½¿â¡£
Ê×ÏÈ£¬ÄãÐèÒª¸´ÖÆÄ¿Ç°µÄ×éÌ¬£¬ÒªÖªµÀÄ¿Ç°µÄ×éÌ¬£¬Ê¹ÓÃ gcc µÄ -v Ñ¡Ïî£º
\begin{tscreen}
\begin{verbatim}
 % gcc -v
 Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 
\end{verbatim}
\end{tscreen}

ÕâÀï£¬i486-unknown-linux ÊÇÄ¿Ç°ËùÓÃµÄÏµÍ³£¬2.7.2.2 ÔòÊÇÄ¿Ç°°æ±¾¡£
ÄãÐèÒª½« {\ttfamily /usr/lib/gcc-lib/$<$ÏµÍ³$>$} ¸´ÖÆµ½ÐÂµÄ²âÊÔÏµÍ³Ä¿Â¼£º
\begin{tscreen}
\begin{verbatim}
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxglibc2
 
\end{verbatim}
\end{tscreen}

µ½ÄãµÄÐÂÏµÍ³Ä¿Â¼ÒÔ¼°°æ±¾Ä¿Â¼ÏÂ£º
\begin{tscreen}
\begin{verbatim}
 cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2
 
\end{verbatim}
\end{tscreen}

ÐÞ¸ÄÄ¿Â¼ÏÂµÄ {\ttfamily specs}¡£ÔÚÕâµµ°¸ÖÐ£¬
½« {\ttfamily /lib/ld-linux.so.1} »»³É {\ttfamily /lib/ld-linux.so.2}£¬
ÄãÒ²±ØÐèÒªÒÆÈ¥µµ°¸ÖÐËùÓÐµÄ {\ttfamily \%$\{$...:-lgmon$\}$} ±íÊ¾Ê½£¬
ÒòÎª glibc ²»Ê¹ÓÃ gmon º¯Ê½¿âÀ´×ö profile¡£
Äã¿ÉÒÔÔÚ\ref{specs} {(Specs µµ¡õÀý)}ÕÒµ½Ò»¸ö¡õÀý¡£




\subsection{¸üÐÂ±êÍ·µµÁ¬½á}



ÄãÐèÒªÔÚÄãµÄ include Ä¿Â¼ÏÂ½¨Á¢Á¬½áµ½ÆäËüµÄ include Ä¿Â¼£º
\begin{tscreen}
\begin{verbatim}
 cd /usr/i486-linuxglibc2/include
 ln -s /usr/src/linux/include/linux
 ln -s /usr/src/linux/include/asm
 ln -s /usr/X11R6/include/X11
 
\end{verbatim}
\end{tscreen}

Ò²ÐíÄãÓÐÆäËüµÄº¯Ê½¿â£¬ÀýÈçËµ ncurse£¬
¶øÕâÐ©º¯Ê½¿â»áÐèÒªËüÃÇ×Ô¼ºµÄ±êÍ·µµ£¬
ÄãÓ¦¸Ã´Ó {\ttfamily /usr/include} ¸´ÖÆ»òÁ¬½áÕâÐ©µµ°¸¡£
(ÓÐÐ©º¯Ê½¿âÐèÒªÖØÐÂÓÃ glibc2 À´ compile£¬ÔÚÕâÖÖÇéÐÎÏÂ£¬
Ö»Òª±àÒë²¢ÇÒ°²×°µ½ {\ttfamily /usr/i486-linuxglibc2})




\subsection{²âÊÔÄãµÄ°²×°}



Òª²âÊÔ°²×°ÊÇ·ñ³É¹¦£¬½¨Á¢Ò»µµ°¸ glibc.c ÈçÏÂ£º
\begin{tscreen}
\begin{verbatim}
 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }
 
\end{verbatim}
\end{tscreen}

ÓÃ {\tt\char`\"}-b $<$°²×°Ä¿Â¼$>$ -nostdinc -I$<$°²×°Ä¿Â¼$>$/include -I/usr/lib/gcc-lib/$<$ÐÂÏµÍ³Ä¿Â¼$>$/$<$gcc °æ±¾$>$/include{\tt\char`\"} µÄÑ¡Ïî±àÒë£º
\begin{tscreen}
\begin{verbatim}
 % gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc
 
\end{verbatim}
\end{tscreen}

Ê¹ÓÃ ldd È·¶¨³ÌÊ½ÊÇÓÃ glibc2 Á¬½á£¬¶ø·Ç¾ÉÓÐµÄ libc£º
\begin{tscreen}
\begin{verbatim}
 % ldd glibc
 libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.5.so (0x4000d000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 
\end{verbatim}
\end{tscreen}

Èç¹ûÍ¨¹ý±àÒë£¬Á¬½áÒ²È·¶¨£¬
²¢ÇÒÖ´ÐÐÊ±Ò²²úÉú {\tt\char`\"}hello world!{\tt\char`\"} µÄÊä³ö£¬ÄÇ÷á°²×°¾Í³É¹¦ÁË¡£






\section{°²×°³ÉÖ÷Òªº¯Ê½¿â\label{primary-install}}



ÕâÒ»½ÚµÄÄÚÈÝÊÇ¹Øì¶½« glibc2 °²×°³ÉÄãµÄÖ÷Òª C º¯Ê½¿â¡£
ÈÎºÎÄã±àÒëµÄÐÂ³ÌÊ½¶¼½«»áÁ¬½áµ½ÕâÒ»¸öº¯Ê½¿â£¬
³ý·ÇÄãÓÃÁËÌØÊâµÄ±àÒëÑ¡ÏîÀ´Á¬½áµ½ÆäËüµÄ°æ±¾¡£

¼ÙÈçÄãÊÇÓÃ RedHat »ò Debian ²¢ÇÒÒÑÏÂÔØÏà¹ØµÄ rpm »ò deb µµ£¬
Çë²ÎÔÄ RedHat »ò Debian µÄ°²×°ËµÃ÷£¬Äã¿ÉÒÔÖ±½ÓÌø¹ýÕâÒ»½Ú¡£




\subsection{ÓÉÔ­Ê¼Âë±àÒëº¯Ê½¿â\label{compiling}}



ÕâÒ»½Ú½âÊÍÈçºÎÓÉÔ­Ê¼Âë±àÒë glibc 2 Óë¸½¼ÓÌ×¼þ¡£
Èç¹ûÄãÏëÒª¸Ä±ä×î¼Ñ»¯Óë×éÌ¬Ñ¡Ïî»òÊ¹ÓÃ¶îÍâµÄÌ×¼þ£¬ÄÇÄã¾Í±ØÐë±àÒëº¯Ê½¿â¡£




\subsubsection{ÐèÇó}



\begin{itemize}
\item Ô¼ 150 MB µÄ´Åµú¿Õ¼ä
\item GNU make 3.75
\item gcc $>$= 2.7.2 (×îºÃÊÇ 2.7.2.1)
\item binutils 2.8.1 (¼ÙÈçÊÇ alpha ÄãÐèÒª snapshot)
\item bash 2.0
\item autoconf 2.12 (¼ÙÈçÄã¸ü¶¯ÁË configure.in)
\item texinfo 3.11
\end{itemize}


ÔÚÒ»°²×°ÓÐ 64MB ¼ÇÒäÌåµÄ i586@133 »úÆ÷ÉÏ£¬
±àÒëÍêÕûµÄº¯Ê½¿âÓë¸½¼ÓÌ×¼þ´óÔ¼ÐèÒªÈý¸öÐ¡Ê±¡£
¶øÔÚ i686@200 µÄ»úÆ÷ÉÏÔòÔ¼ÐèÒªÒ»¸ö°ëÐ¡Ê±¡£




\subsubsection{½â¿ªÔ­Ê¼Âë}



ÄãÐèÒª´Ó archive ÖÐ½â³öÔ­Ê¼Âë²ÅÄÜ±àÒëËü£¬
×îºÃµÄ·½Ê½ÊÇ£º
\begin{tscreen}
\begin{verbatim}
 tar xzf glibc-2.0.6.tar.gz
 cd glibc-2.0.6
 tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
 tar xzf ../glibc-crypt-2.0.6.tar.gz
 tar xzf ../glibc-localedata-2.0.6.tar.gz
 
\end{verbatim}
\end{tscreen}

Õâ½«»á°Ñ linuxthreads¡¢crypt Óë localedata µÈÄ¿Â¼·Åµ½ glibc-2.0.6 Ä¿Â¼ÏÂ£¬
Èç´Ë configure ²ÅÄÜÕÒµ½ÕâÐ©¸½¼ÓÌ×¼þ¡£




\subsubsection{Éè¶¨×éÌ¬}



ÔÚ {\ttfamily glibc-2.0.6} µÄÄ¿Â¼µ×ÏÂ£¬½¨Á¢Ò»¸öÐÂµÄÄ¿Â¼ compile£¬
²¢ÇÒ cd µ½ compile µ×ÏÂ£¬ËùÒ²µÄ¹¤×÷¶¼»áÔÚÕâ¸öÄ¿Â¼ÖÐÍê³É£¬
Õâ»á¼ò»¯ááÐøµÄÇå³ý¹¤×÷¡£
(·¢Õ¹ÕßËÆºõ²¢Î´ÈÃ 'make clean' ×÷µÃºÜºÃ)
\begin{tscreen}
\begin{verbatim}
 mkdir compile
 cd compile
 
\end{verbatim}
\end{tscreen}


Ö´ÐÐ {\ttfamily ../configure}¡£
ÒªÊ¹ÓÃ¸½¼ÓÌ×¼þÄã±ØÐèÓÃ --enable-add-ons À´Ö¸¶¨£¬
ÀýÈç --enable-add-ons=linuxthreads,crypt,localedata¡£
Ò²ÐíÄãÒ²»áÏëÒªÖ¸¶¨°²×°µÄÄ¿Â¼£¬Òª·ûºÏ linux ±ê×¼¼Ü¹¹£¬
Ö¸¶¨Îª --prefix=/usr¡£
(µ±ÔÚ linux ÏµÍ³ÉÏ prefix ±»ÉèÎª {\ttfamily /usr}£¬
configure ÖªµÀÒªµ÷ÕûÆäËüµÄÂ·¾¶£¬
ºÃ½« libc.so ÒÔ¼°ÆäËüÖØÒªµÄº¯Ê½¿â·Åµ½ {\ttfamily /lib})
ÍêÕûµÄ configure ÃüÁîÈçÏÂ£º
\begin{tscreen}
\begin{verbatim}
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
\end{verbatim}
\end{tscreen}





\subsubsection{±àÒë}



Òª±àÒëÓëÑéÖ¤£¬
Ö´ÐÐ£º
\begin{tscreen}
\begin{verbatim}
 make
 make check
 
\end{verbatim}
\end{tscreen}





\subsection{×¼±¸°²×°}

 

ÎÞÂÛÊÇÓÉÔ­Ê¼Âë±àÒë»òÊÇÔ¤ÏÈ±àÒëºÃµÄ°æ±¾£¬ÄãÏÖÔÚ±ØÐèÒÆ¶¯Ä³Ð©µµ°¸À´Ó­½ÓÐÂµÄº¯Ê½¿â¡£
ÈÎºÎÐÂ±àÒëµÄ³ÌÊ½»á±»Á¬½áµ½ glibc£¬µ«ÊÇ¾ÉÓÐ¾²Ì¬Á¬½áµÄ³ÌÊ½ÈÔÈ»ÒÐ¿¿Öø libc 5£¬
ËùÒÔÄã²»ÄÜÖ»ÊÇ¸²¸Çµô¾ÉÓÐµÄ°æ±¾¡£

\begin{enumerate}
\item ½¨Á¢Ò»¸öÐÂµÄÄ¿Â¼À´·ÅÖÃ¾Éµµ°¸£º
\begin{tscreen}
\begin{verbatim}
 mkdir -p /usr/i486-linuxlibc5/lib
 
\end{verbatim}
\end{tscreen}

\item ¾ÉµÄ±êÍ·µµ±ØÐè´Ó {\ttfamily /usr/include} ÒÆ¿ª£º
\begin{tscreen}
\begin{verbatim}
 mv /usr/include /usr/i486-linuxlibc5/include
 
\end{verbatim}
\end{tscreen}

\item ½¨Á¢Ò»¸öÐÂµÄ include Ä¿Â¼£¬²¢ÇÒÉè¶¨µ½ÆäËü include Ä¿Â¼µÄÁ¬½á£º
\begin{tscreen}
\begin{verbatim}
 mkdir /usr/include
 ln -s /usr/src/linux/include/linux /usr/include/linux
 ln -s /usr/src/linux/include/asm /usr/include/asm
 ln -s /usr/X11R6/include/X11 /usr/include/X11
 ln -s /usr/lib/g++-include /usr/include/g++
 
\end{verbatim}
\end{tscreen}

ÕâÐ©Á¬½áÐëÒªÊÓÄãµÄÏµÍ³¶øÉÔ×÷µ÷Õû¡£
×îÉÙÔÚ Slackware ÖÐ£¬g++ ±êÍ·µµ°¸ÔÚ {\ttfamily /usr/local/g++-include}£¬
¶ø Debian È´·ÅÔÚ {\ttfamily /usr/include/g++}£¬
²¢ÇÒ½« {\ttfamily /usr/lib/g++-include} Á¬½áµ½ {\ttfamily /usr/include/g++}¡£
ÔÚááÕßµÄÇéÐÎ£¬ÄãÒ²Ðí»áÏëÒª½«Ô­Ê¼µÄ g++ include Ä¿Â¼ÒÆ»Øµ½
{\ttfamily /usr/include}¡£
\item »Ø´æËùÓÐ¶îÍâµÄ±êÍ·µµÓëÁ¬½á¡£
Ä³Ð©·Ç±ê×¼µÄº¯Ê½¿â»á½«µµ°¸·ÅÖÁ {\ttfamily /usr/include}£¬
»òÊÇÔÚ {\ttfamily /usr/include} ·ÅÖÃÒ»Á¬½áµ½ËüÃÇµÄ include Ä¿Â¼ÏÂ¡£
ÕâÐ©µµ°¸ÓëÁ¬½á±ØÐë»Ø´æ£¬Èç´Ë²Å¿ÉÒÔÕýÈ·µÄÊ¹ÓÃÕâÐ©¶îÍâµÄº¯Ê½¿â¡£
\item ½«ÄãµÄÐÂº¯Ê½¿âÂ·¾¶
(ÀýÈç {\ttfamily /usr/i486-linuxlibc5/lib})
¼ÓÈëµ½ {\ttfamily /etc/ld.so.conf} µÄ{\itshape ¶¥¶Ë\/}¡£
Äã×îºÃÒªÓÐ ld.so 1.8.8 »òÊÇ¸üÐÂµÄ°æ±¾£¬
ÒÔ±ÜÃâÔÚ°²×°Íê glibc Ö®áá³öÏÖÒ»Ð©Ææ¹ÖµÄÑ¶Ï¢¡£
\item °áÒÆ»ò¸´ÖÆËùÓÐµÄ¾Éº¯Ê½¿âµ½ÐÂµÄÄ¿Â¼¡£
\begin{tscreen}
\begin{verbatim}
 mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
 mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
 mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
 cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
 cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
 
\end{verbatim}
\end{tscreen}

¼ÙÈçÄãµÄ {\ttfamily /usr} Óë {\ttfamily /} ÊÇÔÚ²»Í¬µÄ partition ÉÏ£¬
ÄÇ {\ttfamily libm.so.5} Óë {\ttfamily libc.so.5} Ó¦¸ÃÓÃ¸´ÖÆµÄ·Ç°áÒÆ£¬
ÒòÎªÒ»Ð©ÓÃÀ´Æô¶¯ linux µÄ³ÌÊ½»áÐèÒªÕâÁ½¸öº¯Ê½¿â£¬
Òò´Ë±ØÐëÒªÎ»ÔÚ root partition¡£
\item ½« {\ttfamily /usr/lib/*.o} ÒÆµ½ÐÂµÄÄ¿Â¼ÏÂ¡£
\begin{tscreen}
\begin{verbatim}
 mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
 mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
 
\end{verbatim}
\end{tscreen}

\item ÔÚÄãµÄº¯Ê½¿âÒÆ¶¯áá£¬
¸üÐÂ library cache¡£
\begin{tscreen}
\begin{verbatim}
 ldconfig -v
 
\end{verbatim}
\end{tscreen}
\end{enumerate}





\subsection{ÓÉÔ¤ÏÈ±àÒëºÃµÄÌ×¼þ°²×°}



Èç¹ûÄãÊÇÓÉÒ»ÒÑÔ¤ÏÈ±àÒëºÃµÄ glibc °²×°£¬
Äã±ØÐë£º
\begin{tscreen}
\begin{verbatim}
 cd /
 gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -
 gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -
 ldconfig -v
 
\end{verbatim}
\end{tscreen}

Èç¹ûÄãÓÃµÄÊÇ²»Í¬µÄÏµÍ³¼Ü¹¹»òÊÇ°æ±¾£¬ÇëÖÃ»»ÊÊµ±µÄµµÃû¡£




\subsection{ÓÉÔ­Ê¼Âë°²×°}



ÒªÓÉÔ­Ê¼Âë°²×°£¬
Ö´ÐÐ£º
\begin{tscreen}
\begin{verbatim}
 make install
 ldconfig -v
 
\end{verbatim}
\end{tscreen}





\subsection{¸üÐÂ gcc specs}



°²×°µÄ×îááÒ»²½
(²»¹ÜÄãÊÇÓÉÔ¤ÏÈ±àÒëºÃµÄÌ×¼þ»òÊÇÓÉÔ­Ê¼Âë°²×°)
ÊÇ¸üÐÂ gcc µÄ {\ttfamily spec} µµ£¬
ÈÃÄã¿ÉÒÔÕýÈ·µÄÁ¬½áÄãµÄ³ÌÊ½¡£
ÒªÖªµÀ gcc ËùÓÃµÄÊÇÄÇÒ»¸ö spec µµ£¬
ÈçÏÂÊäÈë£º
\begin{tscreen}
\begin{verbatim}
 % gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2
 
\end{verbatim}
\end{tscreen}


ÔÚÕâÀï£¬ÏµÍ³ÊÇ i486-unknown-linux£¬
¶ø°æ±¾ÔòÊÇ 2.7.2.2¡£
Äã±ØÐë½« {\ttfamily /usr/lib/gcc-lib/$<$ÏµÍ³$>$} ¸´ÖÆµ½¾ÉµÄÏµÍ³Ä¿Â¼ÏÂ£º
\begin{tscreen}
\begin{verbatim}
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5
 
\end{verbatim}
\end{tscreen}


µ½Ô­ÏÈµÄÄ¿Â¼Óë°æ±¾Ä¿Â¼ÏÂ£º
\begin{tscreen}
\begin{verbatim}
 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
 
\end{verbatim}
\end{tscreen}

²¢ÐÞ¸ÄÔÚÍ¬Ò»Ä¿Â¼ÏÂµÄ {\ttfamily specs}¡£
½«Õâµµ°¸ÖÐµÄ {\ttfamily /lib/ld-linux.so.1} ¸Ä³É {\ttfamily /lib/ld-linux.so.2}£¬
²¢ÇÒÒª½«ËùÓÐµÄ {\ttfamily \%$\{$...:-lgmon$\}$} ±íÊ¾Ê½É¾³ý£¬
ÒòÎª glibc ²»Ê¹ÓÃ gmon º¯Ê½¿âÀ´×ö profiling¡£
Äã¿ÉÒÔÔÚ \ref{specs} {(Specs µµ¡õÀý)} ÕÒµ½Ò»·Ý specs µµµÄ¡õÀý¡£




\subsection{²âÊÔÄãµÄ°²×°}



Òª²âÊÔ°²×°ÊÇ·ñÕýÈ·£¬
Çë½¨Á¢ glibc.c ÈçÏÂ£º
\begin{tscreen}
\begin{verbatim}
 #include <stdio.h>

 main()
 {
     printf("hello world!\n");
 }
 
\end{verbatim}
\end{tscreen}

²¢ÇÒ compile Õâ¸ö³ÌÊ½£º
\begin{tscreen}
\begin{verbatim}
 % gcc glibc.c -o glibc
 
\end{verbatim}
\end{tscreen}

Ê¹ÓÃ ldd À´²éÖ¤Õâ¸ö³ÌÊ½ÊÇÁ¬½áµ½ glibc2 ¶ø·ÇÄãµÄ¾É libc£º
\begin{tscreen}
\begin{verbatim}
 % ldd glibc
 libc.so.6 => /lib/libc.so.6 (0x4000e000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
 
\end{verbatim}
\end{tscreen}

¼ÙÈçÕâ¸ö³ÌÊ½¿ÉÒÔÍ¨¹ý compile£¬²¢ÇÒÔÚÖ´ÐÐáá²úÉú {\tt\char`\"}hello world!{\tt\char`\"}
µÄÊä³ö£¬ÄÇ÷á±íÊ¾ÒÑ¾­°²×°³É¹¦¡£






\section{Ê¹ÓÃ·ÇÖ÷ÒªµÄ C º¯Ê½¿â±àÒë³ÌÊ½}



ÓÐÐ©Ê±ºòÄã»áÏëÒªÊ¹ÓÃ²»Í¬µÄº¯Ê½¿âÀ´±àÒëÄãµÄ³ÌÊ½£¬ÕâÒ»½Ú»á½âÊÍÈçºÎ´ï³ÉÕâ¸öÄ¿µÄ¡£
ÎÒ»áÊ¹ÓÃÔÚÇ°Á½½ÚÖÐËùÊ¹ÓÃµÄÄ¿Â¼Óë°²×°Ãû³Æ£¬¼ÇµÃÒª¸Ä±äÕâÐ©Ãû³ÆÒÔ·ûºÏÄãµÄÉè¶¨¡£




\subsection{Ò»¸ö¹Øì¶Ê¹ÓÃ·ÇÖ÷Òª C º¯Ê½¿âµÄ¾¯¸æ}

ÔÚÄã¿ªÊ¼±àÒëÈÎºÎ»áÔÚ¿ª»úÊ±ÓÃµ½µÄ³ÌÊ½Ö®Ç°£¬
¼ÙÈç³ÌÊ½ÊÇ¶¯Ì¬Á¬½á£¬²¢ÇÒÊÇÔÚ non-root partition ±» mount Ö®Ç°Ê¹ÓÃµÄ»°£¬
ÄÇËùÓÐÁ¬½áÓÃµÄº¯Ê½¿â¶¼±ØÐëÔÚ root partition ÉÏ¡£
ÔÚÇ°ÃæµÄ°²×°³ÌÐòÀï£¬ÎÒÃÇ½« glibc °²×°³ÉÖ÷ÒªµÄº¯Ê½¿â£¬
¶ø¾ÉµÄº¯Ê½¿âÈÔÈ»±£ÁôÔÚ {\ttfamily /lib}£¬
{\ttfamily /lib} »áÔÚ root partition ÉÏ£¬
Ò²¾ÍÊÇËµ£¬ËùÓÐÔÚ¿ª»úÊ±»áÓÃµ½µÄ³ÌÊ½¶¼ÄÜÕý³£¹¤×÷¡£
È»¶ø£¬ÈôÄãµÄ {\ttfamily /usr} ÊÇÔÚ²»Í¬µÄ partition ÉÏ£¬
ÇÒ°Ñ glibc µ±³É²âÊÔÓÃµÄº¯Ê½¿â£¬°²×°ÔÚ {\ttfamily /usr/i486-linuxglibc2}£¬
ÄÇ³ý·Ç {\ttfamily /usr} ÒÑ¾­±» mount£¬·ñÔòËùÓÐÄãÓÃ glibc ±àÒëµÄ³ÌÊ½¶¼½«²»ÄÜÊ¹ÓÃ¡£




\subsection{ÓÃ²âÊÔ°²×°µÄ glibc ±àÒë³ÌÊ½}

ÒªÓÃ²âÊÔ°²×°µÄ glibc ±àÒë³ÌÊ½£¬
Äã±ØÐëÒª½« include Â·¾¶ÖØÉè³É glibc µÄ include Â·¾¶¡£
Ö¸¶¨ {\tt\char`\"}-nostdinc{\tt\char`\"} »áÈ¡ÏûÕý³£ include Â·¾¶£¬
¶ø {\tt\char`\"}-I/usr/i486-linuxglibc2/include{\tt\char`\"} Ôò»áÖ¸µ½ glibc µÄ include
Ä¿Â¼£¬
ÄãÒ²±ØÐëÒªÖ¸¶¨ gcc ±ê×¼ include Ä¿Â¼£¬
Í¨³£ÊÇ {\ttfamily /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include}¡£
(ÕâÀï¼ÙÉèÄã°²×°²âÊÔµÄº¯Ê½¿âÔÚ i486-linuxglibc2£¬
¶ø gcc µÄ°æ±¾ÊÇ 2.7.2.2)

ÒªÓÃ²âÊÔ°²×°µÄ glibc À´Á¬½á£¬Äã±ØÐëÖ¸Ã÷ gcc Éè¶¨£¬
ÕâÊÇÓÉ {\tt\char`\"}-b i486-linuxglibc2{\tt\char`\"} ÕâÑ¡ÏîÀ´´ï³É¡£

¶Ô´ó²¿·ÝµÄ³ÌÊ½£¬
Äã¿ÉÒÔ¼òµ¥µÄ½«Æä¼ÓÈë makefile µÄ
{\ttfamily \$CFLAGS}
Óë
{\ttfamily \$LDFLAGS}
Ñ¡ÏîÖÐ£º
\begin{tscreen}
\begin{verbatim}
 CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2
 LDFLAGS = -b i486-linuxglibc2
 
\end{verbatim}
\end{tscreen}

¼ÙÈçÄãÊ¹ÓÃ configure Õâ¸ö script£¬ÔÚÖ´ÐÐ configure Ö®Ç°£¬
¶¨Òå shell ±äÊý {\ttfamily \$CFLAGS} Óë {\ttfamily \$LDFLAGS}
(ÔÚ csh/tcsh ÏÂÓÃ env/setenv
ÔÚ sh/bash/ÆäËüÖ®ÏÂÓÃ set/export)¡£
ÕâÑù²úÉúµÄ makefile Ó¦¸Ã»á°üº¬ÕýÈ·µÄ {\ttfamily \$CFLAGS} Óë
{\ttfamily \$LDFLAGS}¡£
²»¹ý²¢·ÇËùÓÐµÄ configure scrpt ¶¼»áÈ¥È¡µÃÕâÐ©±äÊý£¬
ËùÒÔÔÚÖ´ÐÐÍê configure Ö®áá£¬Äã»¹ÊÇÒª¼ì²éÒ»ÏÂ makefile£¬
¼ÙÈçÐèÒªµÄ»°£¬ÊÖ¶¯ÐÞ¸ÄËü¡£

¼ÙÈçÄãËùÒª±àÒëµÄ³ÌÊ½Ö»ºô½Ð gcc£¬(¶ø²»Ö±½Óºô½Ð cpp »ò binutils)
Äã¿ÉÒÔÊ¹ÓÃÒÔÏÂµÄ script£¬Ê¡È¥Ã¿´ÎÖ¸¶¨ËùÓÐÑ¡ÏîµÄÂé·³£º
\begin{tscreen}
\begin{verbatim}
 #!/bin/bash
 /usr/bin/gcc -b i486-linuxglibc2 -nostdinc \
              -I/usr/i486-linuxglibc2/include \
              -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"
 
\end{verbatim}
\end{tscreen}

±àÒëÊ±Äã¿ÉÒÔÊ¹ÓÃÕâ¸ö script ¶ø²»ÊÇ gcc¡£




\subsection{µ± glibc ÊÇÖ÷Òªº¯Ê½¿âÊ±ÓÃ libc 5 ±àÒë³ÌÊ½}

µ±ÄãÒÑ¾­½« glibc °²×°³ÉÖ÷ÒªµÄº¯Ê½¿âÖ®áá£¬ÓÖÏëÓÃ¾ÉµÄº¯Ê½¿âÀ´±àÒë³ÌÊ½µÄÊ±ºò£¬
Äã±ØÐë½« include Â·¾¶ÖØÉè³É¾ÉµÄÂ·¾¶¡£
Ö¸¶¨ {\tt\char`\"}-nostdinc{\tt\char`\"} ½«»áÊ¹Ô¤ÉèµÄÂ·¾¶ÎÞÐ§£¬
¶ø {\tt\char`\"}-I/usr/i486-linuxlibc5/include{\tt\char`\"} »á½« include
µÄÂ·¾¶Ö¸µ½¾Éº¯Ê½¿âµÄ include Â·¾¶£¬
ÄãÒ²±ØÐëÒªÖ¸¶¨
{\tt\char`\"}-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include{\tt\char`\"}
ÒÔº¬Èë gcc ËùÐèµÄ include µµ¡£
×¢ÒâÒªÊÓÄãÐÂµÄÄ¿Â¼Óë gcc °æ±¾À´µ÷ÕûÕâÐ©Â·¾¶¡£

ÒªÓÃ¾ÉµÄ libc À´×öÁ¬½á£¬Äã±ØÐëÖ¸¶¨ gcc ËùÓÃµÄ¼Ü¹¹¡£
ÕâÊÇÓÉ {\tt\char`\"}-b i486-linuxlibc5{\tt\char`\"} Õâ¸öÑ¡ÏîËùÖ¸¶¨µÄ¡£

¶Ô´ó²¿·ÝµÄ³ÌÊ½£¬Äã¿ÉÒÔ¼òµ¥µÄ½«ÕâÐ©Ñ¡Ïî¼ÓÈëµ½ makefile ÀïµÄ
{\ttfamily \$CFLAGS}
Óë
{\ttfamily \$LDFLAGS}
Ñ¡ÏîÀï£º
\begin{tscreen}
\begin{verbatim}
 CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5
 LDFLAGS = -b i486-linuxlibc5
 
\end{verbatim}
\end{tscreen}

¼ÙÈçÄãÊ¹ÓÃ configure Õâ¸ö script£¬
ÔÚÖ´ÐÐ configure Ö®Ç°£¬
¶¨Òå shell ±äÊý {\ttfamily \$CFLAGS} Óë {\ttfamily \$LDFLAGS}
(ÔÚ csh/tcsh ÏÂÓÃ env/setenv
ÔÚ sh/bash/»òÆäËüÖ®ÏÂÓÃ set/export)¡£
ÕâÑù²úÉúµÄ makefile Ó¦¸Ã»á°üº¬ÕýÈ·µÄ {\ttfamily \$CFLAGS} Óë
{\ttfamily \$LDFLAGS}¡£
²»¹ý²¢·ÇËùÓÐµÄ configure scrpt ¶¼»áÈ¥È¡µÃÕâÐ©±äÊý£¬
ËùÒÔÔÚÖ´ÐÐÍê configure Ö®áá£¬Äã»¹ÊÇÒª¼ò¼ì²éÒ»ÏÂ makefile£¬
¼ÙÈçÐèÒªµÄ»°£¬ÊÖ¶¯ÐÞ¸ÄËü¡£

¼ÙÈçÄãËùÒª±àÒëµÄ³ÌÊ½Ö»ºô½Ð gcc£¬(¶ø²»Ö±½Óºô½Ð cpp »ò binutils)
Äã¿ÉÒÔÊ¹ÓÃÒÔÏÂµÄ script£¬Ê¡È¥Ã¿´ÎÖ¸¶¨ËùÓÐÑ¡ÏîµÄÂé·³£º
\begin{tscreen}
\begin{verbatim}
 #!/bin/bash
 /usr/bin/gcc -b i486-linuxlibc5 -nostdinc \
              -I/usr/i486-linuxlibc5/include \
              -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"
 
\end{verbatim}
\end{tscreen}

±àÒëÊ±Äã¿ÉÒÔÊ¹ÓÃÕâ¸ö script ¶ø²»ÊÇ gcc¡£






\section{±àÒë C++ ³ÌÊ½}



ÒòÎª libg++ Ê¹ÓÃÁË²¿·ÝµÄÊýÑ§º¯Ê½¿â£¬Ò²¾ÍÊÇËµ»áÁ¬½áµ½ libm¡£
ÓÉì¶ÄãÄ¿Ç°µÄ libg++ ÊÇÓÃ¾É°æµÄº¯Ê½¿âËù½¨Á¢µÄ£¬
ËùÒÔÄã±ØÐëÖØÐÂÓÃ glibc À´ compile libg++ »òÊÇÈ¡µÃÒ»·ÝÔ¤ÏÈ±àÒëºÃµÄ°æ±¾¡£
×îÐÂ°æµÄ libg++ source ÓëÓÃ glibc ËùÁ¬½áµÄÔ¤ÏÈ±àÒë°æ¿ÉÒÔÔÚ
\nameurl{ftp://ftp.yggdrasil.com/private/hjl/}{}
ÕÒµ½¡£




\subsection{ÓÃ²âÊÔµÄ C º¯Ê½¿â°²×° libg++}



¼ÙÈçÄãÒÑ¾­½« glibc °²×°³É²âÊÔÓÃµÄº¯Ê½¿â£¬ÄÇÄã±ØÐë°²×°µ½ glibc Ëù°²×°µÄÄ¿Â¼ÏÂ
(ÀýÈçÓÉÇ°Ò»½ÚËùÊ¾µÄ {\ttfamily /usr/i486-linuxglibc2})¡£
¼ÙÈçÄãÒª°²×°Ô¤ÏÈ±àÒëºÃµÄ°æ±¾
(ÕâÒ²ÊÇÎÒ½¨ÒéµÄ°²×°·½Ê½£¬ÒòÎªÎÒÒ»Ö±¶¼²»ÄÜÓÃÕâÖÖ·½Ê½³É¹¦µØ±àÒë libg++)£¬
Äã±ØÐë½«µµ°¸½âµ½ÔÝ´æµÄÄ¿Â¼ÏÂ£¬
½« {\ttfamily usr/lib/} ÏÂµÄËùÓÐµµ°¸°áµ½
{\ttfamily $<$install directory$>$/lib/}£¬
²¢½« {\ttfamily usr/include/} ÏÂµÄËùÓÐµµ°¸°áµ½
{\ttfamily $<$install directory$>$/include/} ÏÂ£¬
(¼ÇµÃÏÈÉ¾³ý {\ttfamily include/g++} Õâ¸öÁ¬½á£¡)
ÔÙ½« {\ttfamily usr/bin/} ÏÂµÄµµ°¸°áµ½ 
{\ttfamily $<$install directory$>$/bin/}¡£




\subsection{ÔÚÖ÷Òª glibc ÏÂ°²×° libg++}

ÈôÄãÒÑ¾­½« glibc °²×°³ÉÖ÷ÒªµÄº¯Ê½¿â£¬¼ÙÈç»¹ÏëÒªÓÃ¾ÉµÄ libc À´±àÒë g++ µÄ³ÌÊ½£¬
ÄÇÄã±ØÐëÏÈ½«¾ÉµÄ libg++ µµ°¸ÒÆÖÁ¾ÉµÄ libc µÄÄ¿Â¼ÏÂ¡£
Ò²Ðí×î¼òµ¥µÄ·½Ê½¾ÍÊÇÈçÇ°Ò»½ÚÓÃ libc 5 À´°²×°Ò»·ÝÐÂ°æµÄ¿½±´£¬
È»ááÔÙÕý³£°²×° glibc °æ¡£




\subsection{Ê¹ÓÃ·ÇÖ÷ÒªµÄ C º¯Ê½¿âÀ´±àÒë C++ ³ÌÊ½}

¼ÙÈçÄãÏëÓÃ·ÇÖ÷ÒªµÄ C º¯Ê½¿âÀ´±àÒë C++ ³ÌÊ½£¬
ÄÇÄã±ØÐëÒª¼ÓÈë g++ µÄ include Ä¿Â¼¡£
ÔÚÉÏÃæµÄÀý×ÓÖÐ£¬
¶Ô²âÊÔÓÃµÄ glibc ÊÇ {\ttfamily /usr/i486-linuxglibc2/include/g++}£¬
¶ø¶ÔÖ÷Òª glibc ÔòÊÇ {\ttfamily /usr/i486-linuxlibc5/include/g++}£¬
ÕâÍ¨³£¶¼¿ÉÒÔÓÉÌí¼ÓÖÁ {\ttfamily \$CXXFLAGS} Õâ¸ö±äÊýÀ´Íê³É£º
\begin{tscreen}
\begin{verbatim}
 CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -I/usr/i486-linuxlibc5/include/g++ -b i486-linuxglibc2
 
\end{verbatim}
\end{tscreen}







\section{±¨¸æ³ô¡õ}



¼ÙÈçÄãÒÔÎªÕâº¯Ê½¿âÓÐ´í£¬ÇëÏÈÔÄ¶Á FAQ£¬Ò²ÐíÒÑ¾­ÓÐÈËÓöµ½¹ýÕâ¸öÎÊÌâ£¬
²¢ÇÒÒ²ÒÑ¾­ÓÐÁË¼òµ¥µÄ½â¾ö·½·¨¡£
ÁíÍâ£¬ÄãÒ²Ó¦¸Ã²é¿´ {\ttfamily INSTALL} µµÖÐµÄ
"Recommended Tools to Install the GNU C Library" Ò»½Ú£¬
ÒòÎªÓÐÐ©´íÎó²»ÔÚì¶ glibc ¶øÊÇÔÚì¶ÕâÐ©¹¤¾ß¡£

¼ÙÉèÄãÕÒµ½ÁË³ô¡õ£¬ÇëÏÈÈ·¶¨ÄÇµÄÈ·ÊÇ³ô¡õ¡£
Ò»¸öÅÐ¶ÏµÄºÃ·½·¨ÊÇ¿´¿´ glibc µÄÐÐÎªÊÇ·ñÓëÆäËüµÄ C º¯Ê½¿âÏàÍ¬¡£
¼ÙÈçÏàÍ¬µÄ»°£¬ÄÇÒ²ÐíÄãÊÇ´íµÄ£¬¶øº¯Ê½¿âÊÇÕýÈ·µÄ¡£
(µ«Ò²²»Ò»¶¨Èç´Ë)
¼ÙÈç²»ÏàÍ¬µÄ»°£¬ÄÇ¿Ï¶¨Á½ÕßÖ®ÖÐÓÐÒ»¸öÊÇ´íµÄ¡£

½ÓÖø£¬Çëµ½ \nameurl{http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl}{}£¬
²¢ÇÒ²é¿´³ô¡õ×ÊÁÏ¿â£¬È·¶¨Õâ¸öÎÊÌâÉÐÎ´ÓÐÈËÌá³ö¡£
ÄãÒ²Ó¦¸Ã¿´¿´ {\ttfamily BUGS}
(ÄÚ¸¶ì¶ libc ÖÐ)
ËùÁÐ³öµÄÄ¿Ç°ÒÑ±»·¢ÏÖµÄ³ô¡õ¡£

Ò»µ©ÄãÈ·¶¨ÕÒµ½ÁËÒ»Ö»ÐÂµÄ³ô¡õ£¬ÇëÊÔÖø½«ËüËõÐ¡µ½×îÐ¡µÄ test case¡£
¾Í C º¯Ê½¿â¶øÑÔ£¬ÄãÖ»ÐèÒª½«ËüËõÐ¡µ½µ¥¶ÀÒ»¸öº¯Ê½ºô½Ð(¼ÙÈç¿ÉÒÔµÄ»°)¡£
ÕâÓ¦¸Ã²»ÊÇÌ«À§ÄÑµÄÊÂ¡£

×îááÒ»¸ö²½ÖèÊÇ¾ÍÄãµÄ test case Ìá³ö³ô¡õ±¨¸æ¡£
ÒªËÍ³ö³ô¡õ±¨¸æ£¬Çë°üº¬ÄãµÄ test case¡¢ÄãËùµÃµ½µÄ½á¹û¡¢ÄãËùÆÚ´ýµÄ½á¹û¡¢
ÄãÈÏÎª¿ÉÄÜµÄÔ­ÒòÔÚÄÇ
(Ö»ÒªÄãÔøÏë¹ýµÄÈÎºÎÔ­Òò)¡¢ÄãµÄÏµÍ³Àà±ð¡¢ÄãËùÊ¹ÓÃµÄ GNU C º¯Ê½¿â¡¢
GNU CC ±àÒëÆ÷¡¢GNU binutils µÄ°æ±¾¡£ÁíÍâ£¬
Çë¸½ÉÏÖ´ÐÐ {\ttfamily configure} Ê±²úÉúµÄ {\ttfamily config.status} Óë
{\ttfamily config.make}£¬
ÕâÁ½¸öµµ°¸»áÔÚÄãÖ´ÐÐ {\ttfamily configure} Ê±ºòµÄÄ¿Â¼ÏÂ¡£

ËùÓÐµÄ³ô¡õ±¨¸æ¶¼Ó¦¸ÃÊ¹ÓÃ {\ttfamily glibcbug} Õâ¸ö GNU libc Ëù¸½µÄ shell script
ËÍÖÁ \nameurl{mailto:bugs@gnu.org}{bugs@gnu.org} (¾ÉµÄÎ»Ö· \nameurl{mailto:bugs@gnu.ai.mit.edu}{bugs@gnu.ai.mit.edu}
Ò²ÈÔÈ»¿ÉÒÔÊ¹ÓÃ)¡£
»òÊÇµ½ GNATS ÍøÕ¾ÉÏÀûÓÃ
\nameurl{http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl}{}
Õâ¸ö½éÃæÀ´×ö¡£

ÄãµÄ½¨ÒéÓëÎÊÌâÓ¦¸ÃËÍµ½ \nameurl{mailto:bugs-glibc@prep.ai.mit.edu}{bugs-glibc@prep.ai.mit.edu} Õâ¸öÓÊµÝÁÐ±í¡£
¼ÙÈçÄãÃ»ÓÐÔÄ¶ÁÐÂÎÅÈº×é gnu.bug.glibc£¬
ÄÇ÷áÄã¿ÉÒÔÒªÇó \nameurl{mailto:bug-glibc-request@prep.ai.mit.edu}{bug-glibc-request@prep.ai.mit.edu} ¼ÓÈëÕâ¸öÁÐ±í¡£

Çë²»Òª½« GNU C º¯Ê½¿âµÄ³ô¡õ±¨¸æËÍµ½ $<$bug-gcc@prep.ai.mit.edu$>$£¬
ÕâÊÇÎªÁË GNU CC ¶øÉèÁ¢µÄ£¬¶ø GNU CC Óë GNU C º¯Ê½¿âÊÇÓÉ²»Í¬ÈËÃÇµÄËùÎ¬»¤µÄ¡£






\section{Specs µµ¡õÀý\label{specs}}



ÕâÀïÊÇÒ»·Ý {\ttfamily specs} µÄ¡õÀý¡£Õâ½«Ê¹ gcc ÓÃ glibc2 À´±àÒëÓëÁ¬½á¡£
ËüÓ¦¸ÃÎ»ì¶
{\ttfamily /usr/lib/gcc-lib/$<$ÐÂÏµÍ³Ä¿Â¼$>$/$<$gcc °æ±¾$>$}.
¼ÙÈçÄãÓÃµÄÊÇ x86 µÄÏµÍ³£¬ÄÇÄãÒ²Ðí¿ÉÒÔÖ±½Ó½«ÕâÒ»¶Î¸´ÖÆµ½µµ°¸ÀïÈ¥¡£
\begin{tscreen}
\begin{verbatim}
 *asm:
 %{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}

 *asm_final:
 %{pipe:-}

 *cpp:
 %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

 *cc1:
 %{profile:-p}

 *cc1plus:

 *endfile:
 %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s

 *link:
 -m elf_i386 %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static:       %{rdynamic:-export-dynamic}     %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}}  %{static:-static}}}

 *lib:
 %{!shared: %{pthread:-lpthread}        %{profile:-lc_p} %{!profile: -lc}}

 *libgcc:
 -lgcc

 *startfile:
 %{!shared:      %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s}                  %{!p:%{profile:gcrt1.o%s}                         %{!profile:crt1.o%s}}}}    crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}

 *switches_need_spaces:

 *signed_char:
 %{funsigned-char:-D__CHAR_UNSIGNED__}

 *predefines:
 -D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)

 *cross_compile:
 0

 *multilib:
 . ;
 
\end{verbatim}
\end{tscreen}







\section{ÔÓÏî}






\subsection{½øÒ»²½µÄ×ÊÁÏ}






\subsubsection{Ïà¹ØÍøÒ³}



\begin{itemize}
\item \nameurl{http://www.gnu.org/software/libc/libc.html}{FSF's GNU C Library Home Page}
\item \nameurl{http://www.imaxx.net/~thrytis/glibc/}{Using GNU Libc 2 with Linux}
\item \nameurl{http://huizen.dds.nl/~frodol/glibc/}{Installing glibc-2 on Linux}.
\item \nameurl{http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html}{Debian libc5 to libc6 Mini-HOWTO}.
\end{itemize}





\subsubsection{ÐÂÎÅÈº×é}



\begin{itemize}
\item \onlynameurl{comp.os.linux.development.system}
\item \onlynameurl{comp.os.linux.development.apps}
\item \onlynameurl{linux.dev.kernel}
\item \onlynameurl{gnu.bugs.glibc}
\end{itemize}





\subsubsection{ÓÊµÝÁÐ±í}



\begin{description}
\item[Glibc 2 Linux ÌÖÂÛÁÐ±í] \mbox{}

Õâ¸öÓÊµÝÁÐ±íÊÇÎªÁËÈÃ°²×°ÓÐ glibc£¬Ò²¾ÍÊÇÐÂµÄ GNU C º¯Ê½¿â£¬µÄÊ¹ÓÃÕßÌÖÂÛÓÃµÄ¡£
ÒéÌâ°üÀ¨ÏàÈÝÐÔµÄÎÊÌâ£¬ÒÔ¼°ÔÚ linux/glibc »·¾³ÏÂ³ÌÊ½µÄ±àÒëÎÊÌâ¡£
Òª¶©ÔÄÕâ¸öÓÊµÝÁÐ±í£¬
Çë¼ÄÒ»·âÐÅÖÁ \nameurl{mailto:Majordomo@ricardo.ecn.wfu.edu}{Majordomo@ricardo.ecn.wfu.edu}£¬
ÐÅµÄÄÚÈÝÎª "subscribe glibc-linux $<$your email address$>$"¡£

\end{description}





\subsection{¹±Ï×ÕßÁÐ±í}

´ó²¿·ÝµÄ×ÊÑ¶¶¼ÊÇÓÉ
\nameurl{http://www.gnu.org/software/libc/libc.html}{GNU Libc web page}
ÒÔ¼°
Ulrich Drepper µÄ $<$drepper@gnu.ai.mit.edu$>$ glibc 2
announcement
ËùÍµÀ´µÄ£¬
Andreas Jaeger $<$aj@arthur.rhein-neckar.de$>$ ÔòÌá¹©ÁË²¿·ÝµÄ³ô¡õ±¨¸æ¡£

ÒÔÏÂ¸÷Î»¶¼Ôø¶Ô±¾ÎÄ¼þÌá¹©Ïà¹Ø×ÊÑ¶ÒÔ¼°Òâ¼û£º
\begin{itemize}
\item Allex Juang$<$allex@ms2.accmail.com.tw$>$
\item Mark Brown $<$M.A.Brown-4@sms.ed.ac.uk$>$
\item Ulrich Drepper $<$drepper@gnu.ai.mit.edu$>$
\item Scott K. Ellis $<$ellis@valueweb.net$>$
\item Aron Griffis $<$agriffis@coat.com$>$
\item Andreas Jaeger $<$aj@arthur.rhein-neckar.de$>$
\item Frodo Looijaard $<$frodol@dds.nl$>$
\item Ryan McGuire $<$rmcguire@freenet.columbus.oh.us$>$
\item Shaya Potter $<$spotter@capaccess.org$>$
\item Les Schaffer $<$godzilla@futuris.net$>$
\item Andy Sewell $<$puck@pookhill.demon.co.uk$>$
\item Gary Shea $<$shea@gtsdesign.com$>$
\item Stephane $<$sr@adb.fr$>$
\item Jan Vandenbos $<$jan@imaxx.net$>$
\end{itemize}

Õâ·ÝÎÄ¼þµÄ·­ÒëÊÇÓÉÒÔÏÂÊýÈËËùÍê³ÉµÄ£º
\begin{itemize}
\item ÖÐÎÄ£º  Allex Juang$<$allex@ms2.accmail.com.tw$>$
\item ·¨ÎÄ£º  Olivier Tharan $<$tharan@int-evry.fr$>$
\item ÈÕÎÄ£º  Kazuyuki Okamoto $<$ikko-@pacific.rim.or.jp$>$
\end{itemize}





\subsection{»ØÀ¡}



³ýÁË×«Ð´Õâ·Ý HOWTO¡¢Î¬»¤
\nameurl{http://www.imaxx.net/~thrytis/glibc}{glibc 2 for Linux}
ÕâÍøÒ³¡¢²¢ÇÒÔÚÎÒµÄ»úÆ÷ÉÏÊ¹ÓÃÖ®Íâ£¬ÎÒÓë glibc ¼Æ»®ÍêÈ«ÎÞ¹Ø£¬
ÎÒÒ²²»ÁË½âÕâ·½ÃæµÄÒéÌâ£¬µ«»á¾¡¿ÉÄÜµÄ¶Ô¼Ä¸øÎÒµÄÎÊÌâÌá¹©°ïÖú¡£
ÎÒÒ²ºÜ»¶Ó­ÄãÌá³öÈÎºÎµÄ»ØÀ¡¡¢ÐÞÕý¡¢»òÊÇ½¨Òé£¬Çë½«ËüÃÇ¼Äµ½
\nameurl{mailto:ejg3@cornell.edu}{ejg3@cornell.edu}¡£




\subsection{Copyright.}

´Ë·ÝÎÄ¼þµÄ°æÈ¨Êôì¶ Eric Green£¬Õâ·ÝÎÄ¼þ¿ÉÒÔÔÚ LDP µÄÖ´ÕÕÏÂÉ¢²¼¡£



\end{document}
