Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > f8eb492b80dedd2f6cd33cf45dfc65b6 > files > 23

howto-text-zh-2006-5mdv2010.0.noarch.rpm


                             Glibc 2 HOWTO ¤¤¤åª©
                                       
­ì§@ Eric Green, ejg3@cornell.edu
ĶªÌ Allex Juang, allex@ms2.accmail.com

   1.5 ª©, 1998¦~ 2¤ë 8¤é
     _________________________________________________________________
   
   ³o¥÷ glibc 2 HOWTO ¤º®e¥]¬A¦b Linux ¨t²Î¤W¦w¸Ë»P¨Ï¥Î²Ä¤Gª© GNU C
   Library¡C
     _________________________________________________________________
   
1. ²¤¶

     * 1.1 Ãö©ó glibc 2
     * 1.2 Ãö©ó³o¥÷¤å¥ó
     * 1.3 ³o¥÷¤å¥óªº³Ì·s§ïÅÜ
       
2. ¿ï¾Ü§Aªº¦w¸Ë¤è¦¡

3. ¨ú±o¨ç¦¡®w

4. ¦w¸Ë¦¨´ú¸Õ¥Îªº¨ç¦¡®w

     * 4.1 ½sĶ»P¦w¸Ë
     * 4.2 §ó·s dynamic loader
     * 4.3 ³]©w gcc
     * 4.4 §ó·s¼ÐÀYÀɳsµ²
     * 4.5 ´ú¸Õ§Aªº¦w¸Ë
       
5. ¦w¸Ë¦¨¥D­n¨ç¦¡®w

     * 5.1 ¥Ñ­ì©l½X½sĶ¨ç¦¡®w
     * 5.2 ·Ç³Æ¦w¸Ë
     * 5.3 ¥Ñ¹w¥ý½sĶ¦nªº®M¥ó¦w¸Ë
     * 5.4 ¥Ñ­ì©l½X¦w¸Ë
     * 5.5 §ó·s gcc specs
     * 5.6 ´ú¸Õ§Aªº¦w¸Ë
       
6. ¨Ï¥Î«D¥D­nªº C ¨ç¦¡®w½sĶµ{¦¡

     * 6.1 ¤@­ÓÃö©ó¨Ï¥Î«D¥D­n C ¨ç¦¡®wªºÄµ§i
     * 6.2 ¥Î´ú¸Õ¦w¸Ëªº glibc ½sĶµ{¦¡
     * 6.3 ·í glibc ¬O¥D­n¨ç¦¡®w®É¥Î libc 5 ½sĶµ{¦¡
       
7. ½sĶ C++ µ{¦¡

     * 7.1 ¥Î´ú¸Õªº C ¨ç¦¡®w¦w¸Ë libg++
     * 7.2 ¦b¥D­n glibc ¤U¦w¸Ë libg++
     * 7.3 ¨Ï¥Î«D¥D­nªº C ¨ç¦¡®w¨Ó½sĶ C++ µ{¦¡
       
8. ³ø§i¯äÂÎ

9. Specs Àɽd¨Ò

10. Âø¶µ

     * 10.1 ¶i¤@¨Bªº¸ê®Æ
     * 10.2 °^ÄmªÌ¦Cªí
     * 10.3 ¦^õX
     * 10.4 Copyright.
     _________________________________________________________________
   
1. ²¤¶

1.1 Ãö©ó glibc 2

   Glibc 2 ¬O³Ì·sª©ªº GNU C ¨ç¦¡®w¡C ¥¦¥Ø«e¤£»Ý­×§ï´N¥i¥H¦b GNU Hurd
   ¡ALinux i386¡A m68k¡A ¥H¤Î alpha ¨t²Î¤W°õ¦æ¡A ¦Ó 2.1 ª©¤¤±N¥[¤J¹ï
   Linux PowerPC¡A MIPS¡A Sparc¡A Sparc 64 »P Arm µ¥¨t²Îªº¤ä´©¡C¥¼¨Ó±N¥[¤J
   ¹ï¨ä¥¦¬[ºc¤Î§@·~¨t²Îªº¤ä´©¡C
   
   ¦b Linux ¤W¡Aglibc 2 ¬O¥D­nª©¥»¬° 6 ªº libc¡A¤]´N¬O Linux libc 5 ªº«áÄ~
   ªÌ¡C Linux libc ªºµo®i¤H­û·Q¥H¦¹³vº¥¨ú¥N libc 5¡C ´N 2.0.6 ¨Ó¬Ý¡Aglibc
   ¤w¨ã¦³¦¨¼ô²£«~ªº«~½è¡C Glibc 2.1 ª© (¦b¤£¤[ªº±N¨Ó) ±N¥[¤J§ó¦hªº¥\¯à¡A
   ¨Ã²¾´Ó¨ì§ó¦h¨t²Î¤W¡A¨¬°÷·í§@¥D¬y¨Ï¥Î¡C
   
   Glibc 2 ¦³¤T­Ó¿ï¾Ü©Êªºªþ¥[®M¥ó¡G
   
   Crypt
          UFC-crypt ¥[±K®M¥ó¡C ¥Ñ©ó¥X¤f­­¨î©Ò¥H­n¤ÀÂ÷¥X¨Ó¡C
          
   LinuxThreads
          Posix 1003.1c "pthread" ¤¶­±ªº¹ê§@¡C
          
   Locale data
          ¥]§t»s³y¨Ï¥Î glibc ªº internationalization ¥\¯à©Ò»Ý locale ¸ê®Æ
          Àɮתº¸ê®Æ¡C
          
   ±j¯P«Øij¦w¸Ë Cryt »P LinuxThreads ³o¨â­Óªþ¥[®M¥ó¡A ¦pªG¤£¦w¸Ëªº¸Ü¡A¦³¥i
   ¯à·|»P¨ä¥¦¨t²Î¤Wªº¨ç¦¡®w³y¦¨¤£¬Û®eªº±¡§Î¡C (°²¦p§A¤£·Q¨Ï¥Î³o¨â­Óªþ¥[®M
   ¥óªº¸Ü¡A ¨º§A¥²¶·¦b°õ¦æ configure ®É¥[¤W --disable-sanity-checks ªº¿ï
   ¶µ)
   
1.2 Ãö©ó³o¥÷¤å¥ó

   ³o¥÷¤å¥ó²[»\¦p¦ó¦b Linux ¨t²Î¤W¦w¸Ë glib 2¡A ¾A¥Î¹ï¶H¬O¨º¨Ç¦b
   intel-based ¾÷¾¹¤W¨Ï¥Î libc 5 ªº¨Ï¥ÎªÌ¡C ¦ý¬O¹ï©ó¨ä¥¦¨t²Î¥H¤Î¨ä¥¦¤£¦P¨ç
   ¦¡®w (¦p glibc 1) ªº¨Ï¥ÎªÌ¡A ¥u­n±N³o¥÷¤å¥ó¤¤¥X²{ªºÀɦW¥H¤Î¨t²Î¬[ºc¦WºÙ
   §@¾A·íªº¥N´«¡A À³¸Ó¤]¥i±o¨ì¨ÇÀ°§U¡C
   
   ³o¥÷ HOWTO ªº³Ì·sª©¥»ªº«þ¨©¥i¦b [1]Linux Documentation Project ©Î¬O
   [2]http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html §ä¨ì¡C
   
1.3 ³o¥÷¤å¥óªº³Ì·s§ïÅÜ

   1.5 »P 1.4 ª©ªº®t§O¡G
     * ¥Ñ Ed Bailey ¥[¤J¯Á¤Þ
     * §Úªº·s¹q¤l¶l¥ó«H½c¦ì§}
       
   1.4 »P 1.3 ª©ªº®t§O¡G
     * ±N¥Ø«eª¬ºA¥Ñ¹êÅç©Ê§ï¦¨¦¨¼ô²£«~¡C
     * §ó·sµo®i¤¤ªº²¾´Ó¦Cªí¡C
     * §ó·s³Ì·sª©¨ì 2.0.6¡C
       
2. ¿ï¾Ü§Aªº¦w¸Ë¤è¦¡

   ¦³³\¦hºØ¤è¦¡¦w¸Ë glibc¡A§A¥i¥H¦w¸Ë¦¨¤@­Ó´ú¸Õ¥Îªº¨ç¦¡®w¡A ±N¥Ø«e¨Ï¥Îªº¨ç
   ¦¡®w·í§@¬O¤º©wªº¡A µM«á¦b½sĶµ{¦¡ªº®É­Ô¥Î¤£¦Pªº¿ï¶µ¨Ó¸Õ¥Î·sªº¨ç¦¡®w¡C
   ¥Î³oºØ¦w¸Ë¤è¦¡¥H«á¥i¥H»´©öªº²¾°£ glibc¡C (ÁöµM¥Î glibc ³sµ²ªºµ{¦¡¦b²¾°£
   glibc «á³£±N¤£¯à¨Ï¥Î) ¥t¥~¡A¥Î³oºØ¤è¦¡¦w¸Ë¡A§A¥²¶·¥Ñ­ì©l½X­«·s½sĶ¡A ¨Ã
   ¨S¦³ binary distribution ¥i¥H¦w¸Ë¦¨´ú¸Õªº¨ç¦¡®w¡C ³o¼Ëªº¦w¸Ë½Ð°Ñ·Ó [3]
   ¦w¸Ë¦¨´ú¸Õ¥Îªº¨ç¦¡®w¡C
   
   ³o¥÷¤å¥ó¤¤©Ò»¡ªº¥t¤@ºØ¤è¦¡«h¬O±N glibc ¦w¸Ë¦¨¥D­n¨ç¦¡®w¡C ©Ò¦³·s½sĶªº
   µ{¦¡³£±N·|¨Ï¥Î glibc¡A ¦ý¬O§A¤]¥i¥H¦b½sĶ®É¥Î¤£¦Pªº¿ï¶µ¦Ó±Nµ{¦¡³sµ²¨ìÂÂ
   ªº¨ç¦¡®w¡C §A¥i¥Hª½±µ¦w¸Ë¤w¸g½sĶ¦nªºª©¥»¡A¤]¥i¥H¦Û¤v½sĶ¨ç¦¡®w¡C °²¦p
   ·Q§ó§ï³Ì¨Î¤Æ©Î¬O²ÕºA¿ï¶µ¡A ©Î¬O·Q¥[¤J¤w½sĶ¦nªºª©¥»¤¤¥¼¤ä´©ªº add-on ªº
   ¸Ü¡A ¨º§A¥²»Ý¨ú±o­ì©l½X¨Ã¥B¦Û¤v½sĶ¡A³o­Ó¦w¸Ëªº¹Lµ{½Ð°Ñ·Ó [4]¦w¸Ë¦¨¥D­n
   ªº C ¨ç¦¡®w
   
   Frodo Looijaard ´y­z¤F¥t¤@ºØ glibc ªº¦w¸Ë¤è¦¡¡C ¥Lªº¤èªk¬O±N glibc ¦w¸Ë
   ¦¨¦¸­nªº¨ç¦¡®w¡A µM«á³]©w¥æ¤e½sĶ¾¹ (cross compiler) ¨Ó¨Ï¥Î glibc¡C ³o
   ­Ó¤è¦¡¤ñ°_³o¥÷¤å¥ó¤¤ªº´ú¸Õ¦w¸Ë­n½ÆÂøªº¦h¡A¦ý¬O¤ñ¸û®e©ö³sµ²¨ì glibc¡C ³o
   ­Ó¤èªk¦b¥Lªº [5]Installing glibc-2 on Linux ¤å¥ó¤¤»¡©ú¡C
   
   °²¦p§A²{¦b¨Ï¥Îªº¬O Debian 1.3¡A ¦ý¬O¤£·Q¬°¤F glibc ¦Ó¤É¯Å¨ì¤£Ã­©wªºª©¥»
   ¡A ¨º»ò [6]Debian libc5 to libc6 Mini-HOWTO ·|§i¶D§A¦p¦ó¨Ï¥Î Debian ªº
   package ¨Ó¤É¯Å¡C
   
   °²¦p§A­n§â glibc 2 ¦w¸Ë¨ì¤@­«­nªº¨t²Î¤W¡A ¨º¤]³\§AÀ³¨Ï¥Î´ú¸Õªº¦w¸Ë¡A©Î
   ¬O¦b³Æ¥Î¨t²Î¤W¸Õ¸Õ¬Ý¡C §Y¨Ï¨S¦³¯äÂΡA¬Y¨Çµ{¦¡¦b½sĶ¤§«e¤´µM»Ý­n¬Y¨Ç­×§ï
   ¡A ­ì¦]¦b©ó¬Y¨Ç¨ç¦¡­ì«¬»P«¬ºA¤Wªº§ïÅÜ¡C
   
3. ¨ú±o¨ç¦¡®w

   Glibc 2 ¥]§t glibc package ¥H¤Î¼Æ­Óªþ¥[®M¥ó¡G LinuxThreads¡B Locale »P
   Crypt¡A ­ì©l½X¦b
     * [7]ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz
     * [8]ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz
     * [9]ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz
     * [10]ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz
       
   §A»Ý­n¤j¬ù 150MB ªººÏºÐªÅ¶¡¨Ó§@§¹¥þªº½sĶ»P¦w¸Ë¡A ®Ö¤ß¨ç¦¡®wªº°ò¥»¦w¸Ë
   ¤j¬ù­n 50MB¡C
   
   2.0.6 ¨Ã¨S¦³ binary ªº package¡A 2.0.4 ªº binary package ¥u¦³ i386 ¤Î
   m68k ªºª©¥»¡A ¦Ó 2.0.1 for alpha «h¥i¥H¦b¥H¤U¦a¤è§ä¨ì¡G
     * Intel x86:
          + [11]ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz
          + [12]ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.
            tar.gz
     * Alpha:
          + [13]ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux
            .tar.gz
          + [14]ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha
            -linux.tar.gz
     * m68k:
          + [15]ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.
            tar.gz
          + [16]ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linu
            x.bin.tar.gz
       
   ¥Ñ©ó cypt ³o­Óªþ¥[®M¥ó¦³¥X¤f­­¨î¡A«D¬ü°ê¨Ï¥ÎªÌ½Ð¨ì
   [17]ftp://ftp.ifi.uio.no/pub/gnu ¨ú±o¡C
   
   ¦pªG§A¥Îªº¬O RedHat distribution¡A ¨º§A¥i¥H±q
   [18]ftp://ftp.redhat.com/pub/redhat/ ¨ú±o glibc2 ªº rpm¡C ¦b RedHat
   distribution 5.0 ¤¤¡A glibc 2 ¬O¥D­nªº C ¨ç¦¡®w¡C
   
   ¦pªG§A¥Îªº¬O Debian distribution¡A¨º§A¥i¥H±q
   [19]ftp://ftp.debian.org/debian/dists/unstable/main/ ¨ú±o glibc2 ªº
   package¡CÀɦW¬O libc6¡C Glibc 2 ¥Ø«e¬O Debian ´ú¸Õª©ªº°ò¥» package¡A µ¥
   ¨ì Debian 2.0 ¥X¨Ó¤§«á±N·|¬O¥D­nªº C ¨ç¦¡®w¡C
   
4. ¦w¸Ë¦¨´ú¸Õ¥Îªº¨ç¦¡®w

   ³o¤@¸`ªº¤º®e¬OÃö©ó¦p¦ó±N glibc 2 ¦w¸Ë¦¨´ú¸Õ¥Îªº¨ç¦¡®w¡C ©Ò¦³½sĶªºµ{¦¡
   ³£³sµ²¨ì§A¥Ø«eªº¨ç¦¡®w¡A °£«D§Aµ¹¤F¬Y¨ÇÃB¥~ªº°Ñ¼Æ¤~·|³sµ²¨ì·sªº¨ç¦¡®w¡C
   ¥Ñ©ó¸ô®|³Q½sĶ¨ì¬Y¨ÇÀɮפ¤¡A§A»Ý­n¥Ñ­ì©l½X¨Ó¦w¸Ë³o¨ç¦¡®w¡C
   
4.1 ½sĶ»P¦w¸Ë

  »Ý¨D
  
     * ¬ù 150 MB ªººÏºÐªÅ¶¡
     * GNU make 3.75
     * gcc >= 2.7.2 (³Ì¦n¬O 2.7.2.1)
     * binutils 2.8.1 (°²¦p¬O alpha §AÁٻݭn snapshot)
     * bash 2.0
     * autoconf 2.12 (°²¦p§A§ó°Ê¤F configure.in)
     * texinfo 3.11
       
   ¦b¤@¥x¦w¸Ë¦³ 64MB °O¾ÐÅé i586@133 ªº¾÷¾¹¤W¡A ½sĶ§¹¾ãªº¨ç¦¡®w (¥]¬Aªþ¥[
   ®M¥ó) ¤j¬ù¶·­n 3 ¤p®É¡C ¦Ó¦b i686@200 «h¶·¬ù¤@­Ó¥b¤p®É¡C
   
  ¸Ñ¶}­ì©l½X
  
   §A¥²»Ý¥Ñ archive ¤¤¨ú¥X­ì©l½X¡C¦p¦¹¤~¯à½sĶ¥¦¡A³Ì¦nªº¤è¦¡¦p¤U¡G
   
 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

   ³o·|±N linuxthreads¡B crypt »P localedata µ¥¥Ø¿ý©ñ¦Ü glibc-2.0.6 ªº¥Ø¿ý
   ©³¤U¡A ¦p¦¹ configure ¤~¥i¥H§ä¨ì³o¨Ç add-ons¡C
   
  ³]©w²ÕºA
  
   ¦b glibc-2.0.6 ªº¥Ø¿ý©³¤U¡A«Ø¥ß¤@­Ó·sªº¥Ø¿ý compile¡A¨Ã¥B cd ¨ì
   compile ©³¤U¡A ©Ò¦³ªº¤u§@³£·|¦b³o­Ó¥Ø¿ý¤¤§¹¦¨¡A³o·|²¤Æ«áÄòªº²M°£¤u§@¡C
   (µo®iªÌ¦ü¥G¨Ã¥¼Åý 'make clean' §@±o«Ü¦n)
   
 mkdir compile
 cd compile

   °õ¦æ ../configure¡C ­n¨Ï¥Î¤÷¥[®M¥ó¡A§A¥²»Ý¥Î --enable-add-ons «ü©w¡A ¨Ò
   ¦p»¡ --enable-add-ons=linuxthreads,crypt,localedata¡C
   
   §A¤]¥²»Ý«ü©w­n¦w¸Ëªº¥Ø¿ý¡A/usr/i486-linuxglibc2 ¬O­Ó¤£¿ùªº¿ï¾Ü¡A ³o¼Ëªº
   configure ©R¥O¦p¤U¡G
   
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486
-linuxglibc2

  ½sĶ»P¦w¸Ë
  
   ­n½sĶ»PÅçÃÒ¡A°õ¦æ
   
 make
 make check

   °²¦p 'make check' ¦¨¥\¤F¡A¦w¸Ë¨ç¦¡®w¡G
   
 make install

4.2 §ó·s dynamic loader

    1. «Ø¥ß³sµ²¡A ±q ld.so ¨ì /lib/ld-linux.so.2¡G
       
 ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2

       ·í¤@­ÓÀɮ׳sµ²®É¡A³o­Ó¨ç¦¡®w¬O°ß¤@¤@­Ó¦ì¸m©T©wªº¡C ·íí©wªºª©¥»¥X²{
       ªº®É­Ô¡A ¦b /lib ¨Ï¥Î³sµ²¤]·|¨Ï±o±N glibc ¤É¯Å¬°¥D­n¨ç¦¡®w®É§ó¬°»´
       ÃP¡C
    2. ­×§ï /etc/ld.so.conf¡C §A»Ý­n¼W¥[·sªº¨ç¦¡®w©Ò¦bªº¸ô®|¨ìÀɮתº³Ì«á¡A
       ³o¸ô®|À³¸Ó¬O <prefix>/lib¡C °²¦p¥Î¥H¤Wªº¿ï¾Ü´NÀ³¸Ó¬O
       /usr/i486-linuxglibc2/lib¡C ¦b§A­×§ï¤F /etc/ld.so.conf ¤§«á¡A°õ¦æ¡G
       
 ldconfig -v

4.3 ³]©w gcc

   ¦w¸Ëªº³Ì«á¤@¨B¬O§ó·s /usr/lib/gcc-lib ¥H¨Ï gcc ª¾¹D¦p¦ó¨Ï¥Î·sªº¨ç¦¡®w¡C
   ­º¥ý¡A§A»Ý­n½Æ»s¥Ø«eªº²ÕºA¡A­nª¾¹D¥Ø«eªº²ÕºA¡A¨Ï¥Î gcc ªº -v ¿ï¶µ¡G
   
 % gcc -v
 Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2

   ³o¸Ì¡Ai486-unknown-linux ¬O¥Ø«e©Ò¥Îªº¨t²Î¡A2.7.2.2 «h¬O¥Ø«eª©¥»¡C §A»Ý
   ­n±N /usr/lib/gcc-lib/<¨t²Î> ½Æ»s¨ì·sªº´ú¸Õ¨t²Î¥Ø¿ý¡G
   
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxglibc2

   ¨ì§Aªº·s¨t²Î¥Ø¿ý¥H¤Îª©¥»¥Ø¿ý¤U¡G
   
 cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2

   ­×§ï¥Ø¿ý¤Uªº specs¡C¦b³oÀɮפ¤¡A ±N /lib/ld-linux.so.1 ´«¦¨
   /lib/ld-linux.so.2¡A §A¤]¥²»Ý­n²¾¥hÀɮפ¤©Ò¦³ªº %{...:-lgmon} ªí¥Ü¦¡¡A
   ¦]¬° glibc ¤£¨Ï¥Î gmon ¨ç¦¡®w¨Ó°µ profile¡C §A¥i¥H¦b [20]Specs Àɽd¨Ò§ä
   ¨ì¤@­Ó½d¨Ò¡C
   
4.4 §ó·s¼ÐÀYÀɳsµ²

   §A»Ý­n¦b§Aªº include ¥Ø¿ý¤U«Ø¥ß³sµ²¨ì¨ä¥¦ªº include ¥Ø¿ý¡G
   
 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

   ¤]³\§A¦³¨ä¥¦ªº¨ç¦¡®w¡A¨Ò¦p»¡ ncurse¡A ¦Ó³o¨Ç¨ç¦¡®w·|»Ý­n¥¦­Ì¦Û¤vªº¼ÐÀY
   ÀÉ¡A §AÀ³¸Ó±q /usr/include ½Æ»s©Î³sµ²³o¨ÇÀɮסC (¦³¨Ç¨ç¦¡®w»Ý­n­«·s¥Î
   glibc2 ¨Ó compile¡A¦b³oºØ±¡§Î¤U¡A ¥u­n½sĶ¨Ã¥B¦w¸Ë¨ì
   /usr/i486-linuxglibc2)
   
4.5 ´ú¸Õ§Aªº¦w¸Ë

   ­n´ú¸Õ¦w¸Ë¬O§_¦¨¥\¡A«Ø¥ß¤@ÀÉ®× glibc.c ¦p¤U¡G
   
 #include <stdio.h>

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

   ¥Î "-b <¦w¸Ë¥Ø¿ý> -nostdinc -I<¦w¸Ë¥Ø¿ý>/include -I/usr/lib/gcc-lib/<·s
   ¨t²Î¥Ø¿ý>/<gcc ª©¥»>/include" ªº¿ï¶µ½sĶ¡G
   
 % 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

   ¨Ï¥Î ldd ½T©wµ{¦¡¬O¥Î glibc2 ³sµ²¡A¦Ó«D¦³ªº libc¡G
   
 % 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)

   ¦pªG³q¹L½sĶ¡A³sµ²¤]½T©w¡A ¨Ã¥B°õ¦æ®É¤]²£¥Í "hello world!" ªº¿é¥X¡A¨º»ò
   ¦w¸Ë´N¦¨¥\¤F¡C
   
5. ¦w¸Ë¦¨¥D­n¨ç¦¡®w

   ³o¤@¸`ªº¤º®e¬OÃö©ó±N glibc2 ¦w¸Ë¦¨§Aªº¥D­n C ¨ç¦¡®w¡C ¥ô¦ó§A½sĶªº·sµ{
   ¦¡³£±N·|³sµ²¨ì³o¤@­Ó¨ç¦¡®w¡A °£«D§A¥Î¤F¯S®íªº½sĶ¿ï¶µ¨Ó³sµ²¨ì¨ä¥¦ªºª©¥»
   ¡C
   
   °²¦p§A¬O¥Î RedHat ©Î Debian ¨Ã¥B¤w¤U¸ü¬ÛÃöªº rpm ©Î deb ÀÉ¡A ½Ð°Ñ¾\
   RedHat ©Î Debian ªº¦w¸Ë»¡©ú¡A§A¥i¥Hª½±µ¸õ¹L³o¤@¸`¡C
   
5.1 ¥Ñ­ì©l½X½sĶ¨ç¦¡®w

   ³o¤@¸`¸ÑÄÀ¦p¦ó¥Ñ­ì©l½X½sĶ glibc 2 »Pªþ¥[®M¥ó¡C ¦pªG§A·Q­n§ïĄ̊ܳΤƻP
   ²ÕºA¿ï¶µ©Î¨Ï¥ÎÃB¥~ªº®M¥ó¡A¨º§A´N¥²¶·½sĶ¨ç¦¡®w¡C
   
  »Ý¨D
  
     * ¬ù 150 MB ªººÏºÐªÅ¶¡
     * GNU make 3.75
     * gcc >= 2.7.2 (³Ì¦n¬O 2.7.2.1)
     * binutils 2.8.1 (°²¦p¬O alpha §A»Ý­n snapshot)
     * bash 2.0
     * autoconf 2.12 (°²¦p§A§ó°Ê¤F configure.in)
     * texinfo 3.11
       
   ¦b¤@¦w¸Ë¦³ 64MB °O¾ÐÅ骺 i586@133 ¾÷¾¹¤W¡A ½sĶ§¹¾ãªº¨ç¦¡®w»Pªþ¥[®M¥ó¤j
   ¬ù»Ý­n¤T­Ó¤p®É¡C ¦Ó¦b i686@200 ªº¾÷¾¹¤W«h¬ù»Ý­n¤@­Ó¥b¤p®É¡C
   
  ¸Ñ¶}­ì©l½X
  
   §A»Ý­n±q archive ¤¤¸Ñ¥X­ì©l½X¤~¯à½sĶ¥¦¡A ³Ì¦nªº¤è¦¡¬O¡G
   
 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

   ³o±N·|§â linuxthreads¡Bcrypt »P localedata µ¥¥Ø¿ý©ñ¨ì glibc-2.0.6 ¥Ø¿ý
   ¤U¡A ¦p¦¹ configure ¤~¯à§ä¨ì³o¨Çªþ¥[®M¥ó¡C
   
  ³]©w²ÕºA
  
   ¦b glibc-2.0.6 ªº¥Ø¿ý©³¤U¡A«Ø¥ß¤@­Ó·sªº¥Ø¿ý compile¡A ¨Ã¥B cd ¨ì
   compile ©³¤U¡A©Ò¤]ªº¤u§@³£·|¦b³o­Ó¥Ø¿ý¤¤§¹¦¨¡A ³o·|²¤Æ«áÄòªº²M°£¤u§@¡C
   (µo®iªÌ¦ü¥G¨Ã¥¼Åý 'make clean' §@±o«Ü¦n)
   
 mkdir compile
 cd compile

   °õ¦æ ../configure¡C ­n¨Ï¥Îªþ¥[®M¥ó§A¥²»Ý¥Î --enable-add-ons ¨Ó«ü©w¡A ¨Ò
   ¦p --enable-add-ons=linuxthreads,crypt,localedata¡C ¤]³\§A¤]·|·Q­n«ü©w
   ¦w¸Ëªº¥Ø¿ý¡A­n²Å¦X linux ¼Ð·Ç¬[ºc¡A «ü©w¬° --prefix=/usr¡C (·í¦b linux
   ¨t²Î¤W prefix ³Q³]¬° /usr¡A configure ª¾¹D­n½Õ¾ã¨ä¥¦ªº¸ô®|¡A ¦n±N
   libc.so ¥H¤Î¨ä¥¦­«­nªº¨ç¦¡®w©ñ¨ì /lib) §¹¾ãªº configure ©R¥O¦p¤U¡G
   
 ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr

  ½sĶ
  
   ­n½sĶ»PÅçÃÒ¡A °õ¦æ¡G
   
 make
 make check

5.2 ·Ç³Æ¦w¸Ë

   µL½×¬O¥Ñ­ì©l½X½sĶ©Î¬O¹w¥ý½sĶ¦nªºª©¥»¡A§A²{¦b¥²»Ý²¾°Ê¬Y¨ÇÀɮרӪﱵ·s
   ªº¨ç¦¡®w¡C ¥ô¦ó·s½sĶªºµ{¦¡·|³Q³sµ²¨ì glibc¡A¦ý¬O¦³ÀRºA³sµ²ªºµ{¦¡¤´µM
   ­Ê¾aµÛ libc 5¡A ©Ò¥H§A¤£¯à¥u¬OÂл\±¼Â¦³ªºª©¥»¡C
   
    1. «Ø¥ß¤@­Ó·sªº¥Ø¿ý¨Ó©ñ¸mÂÂÀɮסG
       
 mkdir -p /usr/i486-linuxlibc5/lib

    2. ªº¼ÐÀYÀÉ¥²»Ý±q /usr/include ²¾¶}¡G
       
 mv /usr/include /usr/i486-linuxlibc5/include

    3. «Ø¥ß¤@­Ó·sªº include ¥Ø¿ý¡A¨Ã¥B³]©w¨ì¨ä¥¦ include ¥Ø¿ýªº³sµ²¡G
       
 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++

       ³o¨Ç³sµ²¶·­nµø§Aªº¨t²Î¦Óµy§@½Õ¾ã¡C ³Ì¤Ö¦b Slackware ¤¤¡Ag++ ¼ÐÀYÀÉ
       ®×¦b /usr/local/g++-include¡A ¦Ó Debian «o©ñ¦b /usr/include/g++¡A
       ¨Ã¥B±N /usr/lib/g++-include ³sµ²¨ì /usr/include/g++¡C ¦b«áªÌªº±¡§Î
       ¡A§A¤]³\·|·Q­n±N­ì©lªº g++ include ¥Ø¿ý²¾¦^¨ì /usr/include¡C
    4. ¦^¦s©Ò¦³ÃB¥~ªº¼ÐÀYÀÉ»P³sµ²¡C ¬Y¨Ç«D¼Ð·Çªº¨ç¦¡®w·|±NÀɮשñ¦Ü
       /usr/include¡A ©Î¬O¦b /usr/include ©ñ¸m¤@³sµ²¨ì¥¦­Ìªº include ¥Ø¿ý
       ¤U¡C ³o¨ÇÀÉ®×»P³sµ²¥²¶·¦^¦s¡A¦p¦¹¤~¥i¥H¥¿½Tªº¨Ï¥Î³o¨ÇÃB¥~ªº¨ç¦¡®w¡C
    5. ±N§Aªº·s¨ç¦¡®w¸ô®| (¨Ò¦p /usr/i486-linuxlibc5/lib) ¥[¤J¨ì
       /etc/ld.so.conf ªº³»ºÝ¡C §A³Ì¦n­n¦³ ld.so 1.8.8 ©Î¬O§ó·sªºª©¥»¡A ¥H
       ÁקK¦b¦w¸Ë§¹ glibc ¤§«á¥X²{¤@¨Ç©_©Çªº°T®§¡C
    6. ·h²¾©Î½Æ»s©Ò¦³ªºÂ¨禡®w¨ì·sªº¥Ø¿ý¡C
       
 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

       °²¦p§Aªº /usr »P / ¬O¦b¤£¦Pªº partition ¤W¡A ¨º libm.so.5 »P
       libc.so.5 À³¸Ó¥Î½Æ»sªº«D·h²¾¡A ¦]¬°¤@¨Ç¥Î¨Ó±Ò°Ê linux ªºµ{¦¡·|»Ý­n
       ³o¨â­Ó¨ç¦¡®w¡A ¦]¦¹¥²¶·­n¦ì¦b root partition¡C
    7. ±N /usr/lib/*.o ²¾¨ì·sªº¥Ø¿ý¤U¡C
       
 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

    8. ¦b§Aªº¨ç¦¡®w²¾°Ê«á¡A §ó·s library cache¡C
       
 ldconfig -v

5.3 ¥Ñ¹w¥ý½sĶ¦nªº®M¥ó¦w¸Ë

   ¦pªG§A¬O¥Ñ¤@¤w¹w¥ý½sĶ¦nªº glibc ¦w¸Ë¡A §A¥²¶·¡G
   
 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

   ¦pªG§A¥Îªº¬O¤£¦Pªº¨t²Î¬[ºc©Î¬Oª©¥»¡A½Ð¸m´«¾A·íªºÀɦW¡C
   
5.4 ¥Ñ­ì©l½X¦w¸Ë

   ­n¥Ñ­ì©l½X¦w¸Ë¡A °õ¦æ¡G
   
 make install
 ldconfig -v

5.5 §ó·s gcc specs

   ¦w¸Ëªº³Ì«á¤@¨B (¤£ºÞ§A¬O¥Ñ¹w¥ý½sĶ¦nªº®M¥ó©Î¬O¥Ñ­ì©l½X¦w¸Ë) ¬O§ó·s gcc
   ªº spec ÀÉ¡A Åý§A¥i¥H¥¿½Tªº³sµ²§Aªºµ{¦¡¡C ­nª¾¹D gcc ©Ò¥Îªº¬O¨º¤@­Ó
   spec ÀÉ¡A ¦p¤U¿é¤J¡G
   
 % gcc -v
 reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
 gcc version 2.7.2.2

   ¦b³o¸Ì¡A¨t²Î¬O i486-unknown-linux¡A ¦Óª©¥»«h¬O 2.7.2.2¡C §A¥²¶·±N
   /usr/lib/gcc-lib/<¨t²Î> ½Æ»s¨ìªº¨t²Î¥Ø¿ý¤U¡G
   
 cd /usr/lib/gcc-lib/
 cp -r i486-unknown-linux i486-linuxlibc5

   ¨ì­ì¥ýªº¥Ø¿ý»Pª©¥»¥Ø¿ý¤U¡G
   
 cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2

   ¨Ã­×§ï¦b¦P¤@¥Ø¿ý¤Uªº specs¡C ±N³oÀɮפ¤ªº /lib/ld-linux.so.1 §ï¦¨
   /lib/ld-linux.so.2¡A ¨Ã¥B­n±N©Ò¦³ªº %{...:-lgmon} ªí¥Ü¦¡§R°£¡A ¦]¬°
   glibc ¤£¨Ï¥Î gmon ¨ç¦¡®w¨Ó°µ profiling¡C §A¥i¥H¦b [21]Specs Àɽd¨Ò §ä¨ì
   ¤@¥÷ specs Àɪº½d¨Ò¡C
   
5.6 ´ú¸Õ§Aªº¦w¸Ë

   ­n´ú¸Õ¦w¸Ë¬O§_¥¿½T¡A ½Ð«Ø¥ß glibc.c ¦p¤U¡G
   
 #include <stdio.h>

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

   ¨Ã¥B compile ³o­Óµ{¦¡¡G
   
 % gcc glibc.c -o glibc

   ¨Ï¥Î ldd ¨Ó¬dÃÒ³o­Óµ{¦¡¬O³sµ²¨ì glibc2 ¦Ó«D§AªºÂ libc¡G
   
 % ldd glibc
 libc.so.6 => /lib/libc.so.6 (0x4000e000)
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

   °²¦p³o­Óµ{¦¡¥i¥H³q¹L compile¡A¨Ã¥B¦b°õ¦æ«á²£¥Í "hello world!" ªº¿é¥X¡A
   ¨º»òªí¥Ü¤w¸g¦w¸Ë¦¨¥\¡C
   
6. ¨Ï¥Î«D¥D­nªº C ¨ç¦¡®w½sĶµ{¦¡

   ¦³¨Ç®É­Ô§A·|·Q­n¨Ï¥Î¤£¦Pªº¨ç¦¡®w¨Ó½sĶ§Aªºµ{¦¡¡A³o¤@¸`·|¸ÑÄÀ¦p¦ó¹F¦¨³o
   ­Ó¥Øªº¡C §Ú·|¨Ï¥Î¦b«e¨â¸`¤¤©Ò¨Ï¥Îªº¥Ø¿ý»P¦w¸Ë¦WºÙ¡A°O±o­n§ïÅܳo¨Ç¦WºÙ¥H
   ²Å¦X§Aªº³]©w¡C
   
6.1 ¤@­ÓÃö©ó¨Ï¥Î«D¥D­n C ¨ç¦¡®wªºÄµ§i

   ¦b§A¶}©l½sĶ¥ô¦ó·|¦b¶}¾÷®É¥Î¨ìªºµ{¦¡¤§«e¡A °²¦pµ{¦¡¬O°ÊºA³sµ²¡A¨Ã¥B¬O¦b
   non-root partition ³Q mount ¤§«e¨Ï¥Îªº¸Ü¡A ¨º©Ò¦³³sµ²¥Îªº¨ç¦¡®w³£¥²¶·¦b
   root partition ¤W¡C ¦b«e­±ªº¦w¸Ëµ{§Ç¸Ì¡A§Ú­Ì±N glibc ¦w¸Ë¦¨¥D­nªº¨ç¦¡®w
   ¡A ¦Óªº¨ç¦¡®w¤´µM«O¯d¦b /lib¡A /lib ·|¦b root partition ¤W¡A ¤]´N¬O»¡
   ¡A©Ò¦³¦b¶}¾÷®É·|¥Î¨ìªºµ{¦¡³£¯à¥¿±`¤u§@¡C µM¦Ó¡A­Y§Aªº /usr ¬O¦b¤£¦Pªº
   partition ¤W¡A ¥B§â glibc ·í¦¨´ú¸Õ¥Îªº¨ç¦¡®w¡A¦w¸Ë¦b
   /usr/i486-linuxglibc2¡A ¨º°£«D /usr ¤w¸g³Q mount¡A§_«h©Ò¦³§A¥Î glibc ½s
   Ķªºµ{¦¡³£±N¤£¯à¨Ï¥Î¡C
   
6.2 ¥Î´ú¸Õ¦w¸Ëªº glibc ½sĶµ{¦¡

   ­n¥Î´ú¸Õ¦w¸Ëªº glibc ½sĶµ{¦¡¡A §A¥²¶·­n±N include ¸ô®|­«³]¦¨ glibc ªº
   include ¸ô®|¡C «ü©w "-nostdinc" ·|¨ú®ø¥¿±` include ¸ô®|¡A ¦Ó
   "-I/usr/i486-linuxglibc2/include" «h·|«ü¨ì glibc ªº include ¥Ø¿ý¡A §A¤]
   ¥²¶·­n«ü©w gcc ¼Ð·Ç include ¥Ø¿ý¡A ³q±`¬O
   /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include¡C (³o¸Ì°²³]§A¦w¸Ë´ú¸Õ
   ªº¨ç¦¡®w¦b i486-linuxglibc2¡A ¦Ó gcc ªºª©¥»¬O 2.7.2.2)
   
   ­n¥Î´ú¸Õ¦w¸Ëªº glibc ¨Ó³sµ²¡A§A¥²¶·«ü©ú gcc ³]©w¡A ³o¬O¥Ñ "-b
   i486-linuxglibc2" ³o¿ï¶µ¨Ó¹F¦¨¡C
   
   ¹ï¤j³¡¥÷ªºµ{¦¡¡A §A¥i¥H²³æªº±N¨ä¥[¤J makefile ªº $CFLAGS »P $LDFLAGS
   ¿ï¶µ¤¤¡G
   
 CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-lin
uxglibc2/2.7.2.2/include -b i486-linuxglibc2
 LDFLAGS = -b i486-linuxglibc2

   °²¦p§A¨Ï¥Î configure ³o­Ó script¡A¦b°õ¦æ configure ¤§«e¡A ©w¸q shell ÅÜ
   ¼Æ $CFLAGS »P $LDFLAGS (¦b csh/tcsh ¤U¥Î env/setenv ¦b sh/bash/¨ä¥¦¤§¤U
   ¥Î set/export)¡C ³o¼Ë²£¥Íªº makefile À³¸Ó·|¥]§t¥¿½Tªº $CFLAGS »P
   $LDFLAGS¡C ¤£¹L¨Ã«D©Ò¦³ªº configure scrpt ³£·|¥h¨ú±o³o¨ÇÅܼơA ©Ò¥H¦b°õ
   ¦æ§¹ configure ¤§«á¡A§AÁÙ¬O­nÀˬd¤@¤U makefile¡A °²¦p»Ý­nªº¸Ü¡A¤â°Ê­×§ï
   ¥¦¡C
   
   °²¦p§A©Ò­n½sĶªºµ{¦¡¥u©I¥s gcc¡A(¦Ó¤£ª½±µ©I¥s cpp ©Î binutils) §A¥i¥H¨Ï
   ¥Î¥H¤Uªº script¡A¬Ù¥h¨C¦¸«ü©w©Ò¦³¿ï¶µªº³Â·Ð¡G
   
 #!/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 "$@"

   ½sĶ®É§A¥i¥H¨Ï¥Î³o­Ó script ¦Ó¤£¬O gcc¡C
   
6.3 ·í glibc ¬O¥D­n¨ç¦¡®w®É¥Î libc 5 ½sĶµ{¦¡

   ·í§A¤w¸g±N glibc ¦w¸Ë¦¨¥D­nªº¨ç¦¡®w¤§«á¡A¤S·Q¥Îªº¨ç¦¡®w¨Ó½sĶµ{¦¡ªº®É
   ­Ô¡A §A¥²¶·±N include ¸ô®|­«³]¦¨Âªº¸ô®|¡C «ü©w "-nostdinc" ±N·|¨Ï¹w³]
   ªº¸ô®|µL®Ä¡A ¦Ó "-I/usr/i486-linuxlibc5/include" ·|±N include ªº¸ô®|«ü
   ¨ì¨禡®wªº include ¸ô®|¡A §A¤]¥²¶·­n«ü©w
   "-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include" ¥H§t¤J gcc ©Ò»Ýªº
   include ÀÉ¡C ª`·N­nµø§A·sªº¥Ø¿ý»P gcc ª©¥»¨Ó½Õ¾ã³o¨Ç¸ô®|¡C
   
   ­n¥Îªº libc ¨Ó°µ³sµ²¡A§A¥²¶·«ü©w gcc ©Ò¥Îªº¬[ºc¡C ³o¬O¥Ñ "-b
   i486-linuxlibc5" ³o­Ó¿ï¶µ©Ò«ü©wªº¡C
   
   ¹ï¤j³¡¥÷ªºµ{¦¡¡A§A¥i¥H²³æªº±N³o¨Ç¿ï¶µ¥[¤J¨ì makefile ¸Ìªº $CFLAGS »P
   $LDFLAGS ¿ï¶µ¸Ì¡G
   
 CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linu
xlibc5/2.7.2.2/include -b i486-linuxlibc5
 LDFLAGS = -b i486-linuxlibc5

   °²¦p§A¨Ï¥Î configure ³o­Ó script¡A ¦b°õ¦æ configure ¤§«e¡A ©w¸q shell
   ÅÜ¼Æ $CFLAGS »P $LDFLAGS (¦b csh/tcsh ¤U¥Î env/setenv ¦b sh/bash/©Î¨ä¥¦
   ¤§¤U¥Î set/export)¡C ³o¼Ë²£¥Íªº makefile À³¸Ó·|¥]§t¥¿½Tªº $CFLAGS »P
   $LDFLAGS¡C ¤£¹L¨Ã«D©Ò¦³ªº configure scrpt ³£·|¥h¨ú±o³o¨ÇÅܼơA ©Ò¥H¦b°õ
   ¦æ§¹ configure ¤§«á¡A§AÁÙ¬O­n²Àˬd¤@¤U makefile¡A °²¦p»Ý­nªº¸Ü¡A¤â°Ê­×
   §ï¥¦¡C
   
   °²¦p§A©Ò­n½sĶªºµ{¦¡¥u©I¥s gcc¡A(¦Ó¤£ª½±µ©I¥s cpp ©Î binutils) §A¥i¥H¨Ï
   ¥Î¥H¤Uªº script¡A¬Ù¥h¨C¦¸«ü©w©Ò¦³¿ï¶µªº³Â·Ð¡G
   
 #!/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 "$@"

   ½sĶ®É§A¥i¥H¨Ï¥Î³o­Ó script ¦Ó¤£¬O gcc¡C
   
7. ½sĶ C++ µ{¦¡

   ¦]¬° libg++ ¨Ï¥Î¤F³¡¥÷ªº¼Æ¾Ç¨ç¦¡®w¡A¤]´N¬O»¡·|³sµ²¨ì libm¡C ¥Ñ©ó§A¥Ø«e
   ªº libg++ ¬O¥Îª©ªº¨ç¦¡®w©Ò«Ø¥ßªº¡A ©Ò¥H§A¥²¶·­«·s¥Î glibc ¨Ó compile
   libg++ ©Î¬O¨ú±o¤@¥÷¹w¥ý½sĶ¦nªºª©¥»¡C ³Ì·sª©ªº libg++ source »P¥Î
   glibc ©Ò³sµ²ªº¹w¥ý½sĶª©¥i¥H¦b
   [22]ftp://ftp.yggdrasil.com/private/hjl/ §ä¨ì¡C
   
7.1 ¥Î´ú¸Õªº C ¨ç¦¡®w¦w¸Ë libg++

   °²¦p§A¤w¸g±N glibc ¦w¸Ë¦¨´ú¸Õ¥Îªº¨ç¦¡®w¡A¨º§A¥²¶·¦w¸Ë¨ì glibc ©Ò¦w¸Ëªº
   ¥Ø¿ý¤U (¨Ò¦p¥Ñ«e¤@¸`©Ò¥Üªº /usr/i486-linuxglibc2)¡C °²¦p§A­n¦w¸Ë¹w¥ý½s
   Ķ¦nªºª©¥» (³o¤]¬O§Ú«Øijªº¦w¸Ë¤è¦¡¡A¦]¬°§Ú¤@ª½³£¤£¯à¥Î³oºØ¤è¦¡¦¨¥\¦a½s
   Ķ libg++)¡A §A¥²¶·±NÀɮ׸Ѩì¼È¦sªº¥Ø¿ý¤U¡A ±N usr/lib/ ¤Uªº©Ò¦³ÀÉ®×·h
   ¨ì <install directory>/lib/¡A ¨Ã±N usr/include/ ¤Uªº©Ò¦³ÀÉ®×·h¨ì
   <install directory>/include/ ¤U¡A (°O±o¥ý§R°£ include/g++ ³o­Ó³sµ²¡I)
   ¦A±N usr/bin/ ¤UªºÀÉ®×·h¨ì <install directory>/bin/¡C
   
7.2 ¦b¥D­n glibc ¤U¦w¸Ë libg++

   ­Y§A¤w¸g±N glibc ¦w¸Ë¦¨¥D­nªº¨ç¦¡®w¡A°²¦pÁÙ·Q­n¥Îªº libc ¨Ó½sĶ g++
   ªºµ{¦¡¡A ¨º§A¥²¶·¥ý±Nªº libg++ Àɮײ¾¦Üªº libc ªº¥Ø¿ý¤U¡C ¤]³\³Ì²
   ³æªº¤è¦¡´N¬O¦p«e¤@¸`¥Î libc 5 ¨Ó¦w¸Ë¤@¥÷·sª©ªº«þ¨©¡A µM«á¦A¥¿±`¦w¸Ë
   glibc ª©¡C
   
7.3 ¨Ï¥Î«D¥D­nªº C ¨ç¦¡®w¨Ó½sĶ C++ µ{¦¡

   °²¦p§A·Q¥Î«D¥D­nªº C ¨ç¦¡®w¨Ó½sĶ C++ µ{¦¡¡A ¨º§A¥²¶·­n¥[¤J g++ ªº
   include ¥Ø¿ý¡C ¦b¤W­±ªº¨Ò¤l¤¤¡A ¹ï´ú¸Õ¥Îªº glibc ¬O
   /usr/i486-linuxglibc2/include/g++¡A ¦Ó¹ï¥D­n glibc «h¬O
   /usr/i486-linuxlibc5/include/g++¡A ³o³q±`³£¥i¥H¥Ñ²K¥[¦Ü $CXXFLAGS ³o­Ó
   Åܼƨӧ¹¦¨¡G
   
 CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-l
inuxglibc2/2.7.2.2/include -I/usr/i486-linuxlibc5/include/g++ -b i486-linuxglib
c2

8. ³ø§i¯äÂÎ

   °²¦p§A¥H¬°³o¨ç¦¡®w¦³¿ù¡A½Ð¥ý¾\Ū FAQ¡A¤]³\¤w¸g¦³¤H¹J¨ì¹L³o­Ó°ÝÃD¡A ¨Ã¥B
   ¤]¤w¸g¦³¤F²³æªº¸Ñ¨M¤èªk¡C ¥t¥~¡A§A¤]À³¸Ó¬d¬Ý INSTALL Àɤ¤ªº
   "Recommended Tools to Install the GNU C Library" ¤@¸`¡A ¦]¬°¦³¨Ç¿ù»~¤£
   ¦b©ó glibc ¦Ó¬O¦b©ó³o¨Ç¤u¨ã¡C
   
   °²³]§A§ä¨ì¤F¯äÂΡA½Ð¥ý½T©w¨ºªº½T¬O¯äÂΡC ¤@­Ó§PÂ_ªº¦n¤èªk¬O¬Ý¬Ý glibc
   ªº¦æ¬°¬O§_»P¨ä¥¦ªº C ¨ç¦¡®w¬Û¦P¡C °²¦p¬Û¦Pªº¸Ü¡A¨º¤]³\§A¬O¿ùªº¡A¦Ó¨ç¦¡
   ®w¬O¥¿½Tªº¡C (¦ý¤]¤£¤@©w¦p¦¹) °²¦p¤£¬Û¦Pªº¸Ü¡A¨ºªÖ©w¨âªÌ¤§¤¤¦³¤@­Ó¬O¿ù
   ªº¡C
   
   ±µµÛ¡A½Ð¨ì [23]http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl¡A ¨Ã¥B
   ¬d¬Ý¯äÂθê®Æ®w¡A½T©w³o­Ó°ÝÃD©|¥¼¦³¤H´£¥X¡C §A¤]À³¸Ó¬Ý¬Ý BUGS (¤º¥I©ó
   libc ¤¤) ©Ò¦C¥Xªº¥Ø«e¤w³Qµo²{ªº¯äÂΡC
   
   ¤@¥¹§A½T©w§ä¨ì¤F¤@°¦·sªº¯äÂΡA½Ð¸ÕµÛ±N¥¦ÁY¤p¨ì³Ì¤pªº test case¡C ´N C
   ¨ç¦¡®w¦Ó¨¥¡A§A¥u»Ý­n±N¥¦ÁY¤p¨ì³æ¿W¤@­Ó¨ç¦¡©I¥s(°²¦p¥i¥Hªº¸Ü)¡C ³oÀ³¸Ó¤£
   ¬O¤Ó§xÃøªº¨Æ¡C
   
   ³Ì«á¤@­Ó¨BÆJ¬O´N§Aªº test case ´£¥X¯äÂγø§i¡C ­n°e¥X¯äÂγø§i¡A½Ð¥]§t§A
   ªº test case¡B§A©Ò±o¨ìªºµ²ªG¡B§A©Ò´Á«Ýªºµ²ªG¡B §A»{¬°¥i¯àªº­ì¦]¦b¨º (¥u
   ­n§A´¿·Q¹Lªº¥ô¦ó­ì¦])¡B§Aªº¨t²ÎÃþ§O¡B§A©Ò¨Ï¥Îªº GNU C ¨ç¦¡®w¡B GNU CC
   ½sĶ¾¹¡BGNU binutils ªºª©¥»¡C¥t¥~¡A ½Ðªþ¤W°õ¦æ configure ®É²£¥Íªº
   config.status »P config.make¡A ³o¨â­ÓÀÉ®×·|¦b§A°õ¦æ configure ®É­Ôªº¥Ø
   ¿ý¤U¡C
   
   ©Ò¦³ªº¯äÂγø§i³£À³¸Ó¨Ï¥Î glibcbug ³o­Ó GNU libc ©Òªþªº shell script °e
   ¦Ü [24]bugs@gnu.org (ªº¦ì§} [25]bugs@gnu.ai.mit.edu ¤]¤´µM¥i¥H¨Ï¥Î)¡C
   ©Î¬O¨ì GNATS ºô¯¸¤W§Q¥Î
   [26]http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl ³o­Ó¤¶­±¨Ó°µ¡C
   
   §Aªº«Øij»P°ÝÃDÀ³¸Ó°e¨ì [27]bugs-glibc@prep.ai.mit.edu ³o­Ó¶l»¼¦Cªí¡C °²
   ¦p§A¨S¦³¾\Ū·s»D¸s²Õ gnu.bug.glibc¡A ¨º»ò§A¥i¥H­n¨D
   [28]bug-glibc-request@prep.ai.mit.edu ¥[¤J³o­Ó¦Cªí¡C
   
   ½Ð¤£­n±N GNU C ¨ç¦¡®wªº¯äÂγø§i°e¨ì <bug-gcc@prep.ai.mit.edu>¡A ³o¬O¬°
   ¤F GNU CC ¦Ó³]¥ßªº¡A¦Ó GNU CC »P GNU C ¨ç¦¡®w¬O¥Ñ¤£¦P¤H­Ìªº©ÒºûÅ@ªº¡C
   
9. Specs Àɽd¨Ò

   ³o¸Ì¬O¤@¥÷ specs ªº½d¨Ò¡C³o±N¨Ï gcc ¥Î glibc2 ¨Ó½sĶ»P³sµ²¡C ¥¦À³¸Ó¦ì©ó
   /usr/lib/gcc-lib/<·s¨t²Î¥Ø¿ý>/<gcc ª©¥»>. °²¦p§A¥Îªº¬O x86 ªº¨t²Î¡A¨º§A
   ¤]³\¥i¥Hª½±µ±N³o¤@¬q½Æ»s¨ìÀɮ׸̥h¡C
   
 *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-linu
x.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:%{p
rofile: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) -Am
achine(i386)

 *cross_compile:
 0

 *multilib:
 . ;

10. Âø¶µ

10.1 ¶i¤@¨Bªº¸ê®Æ

  ¬ÛÃöºô­¶
  
     * [29]FSF's GNU C Library Home Page
     * [30]Using GNU Libc 2 with Linux
     * [31]Installing glibc-2 on Linux.
     * [32]Debian libc5 to libc6 Mini-HOWTO.
       
  ·s»D¸s²Õ
  
     * [33]comp.os.linux.development.system
     * [34]comp.os.linux.development.apps
     * [35]linux.dev.kernel
     * [36]gnu.bugs.glibc
       
  ¶l»¼¦Cªí
  
   Glibc 2 Linux °Q½×¦Cªí
          ³o­Ó¶l»¼¦Cªí¬O¬°¤FÅý¦w¸Ë¦³ glibc¡A¤]´N¬O·sªº GNU C ¨ç¦¡®w¡Aªº¨Ï
          ¥ÎªÌ°Q½×¥Îªº¡C ijÃD¥]¬A¬Û®e©Êªº°ÝÃD¡A¥H¤Î¦b linux/glibc Àô¹Ò¤Uµ{
          ¦¡ªº½sĶ°ÝÃD¡C ­n­q¾\³o­Ó¶l»¼¦Cªí¡A ½Ð±H¤@«Ê«H¦Ü
          [37]Majordomo@ricardo.ecn.wfu.edu¡A «Hªº¤º®e¬° "subscribe
          glibc-linux <your email address>"¡C
          
10.2 °^ÄmªÌ¦Cªí

   ¤j³¡¥÷ªº¸ê°T³£¬O¥Ñ [38]GNU Libc web page ¥H¤Î Ulrich Drepper ªº
   <drepper@gnu.ai.mit.edu> glibc 2 announcement ©Ò°½¨Óªº¡A Andreas
   Jaeger <aj@arthur.rhein-neckar.de> «h´£¨Ñ¤F³¡¥÷ªº¯äÂγø§i¡C
   
   ¥H¤U¦U¦ì³£´¿¹ï¥»¤å¥ó´£¨Ñ¬ÛÃö¸ê°T¥H¤Î·N¨£¡G
     * Allex Juang<allex@ms2.accmail.com.tw>
     * Mark Brown <M.A.Brown-4@sms.ed.ac.uk>
     * Ulrich Drepper <drepper@gnu.ai.mit.edu>
     * Scott K. Ellis <ellis@valueweb.net>
     * Aron Griffis <agriffis@coat.com>
     * Andreas Jaeger <aj@arthur.rhein-neckar.de>
     * Frodo Looijaard <frodol@dds.nl>
     * Ryan McGuire <rmcguire@freenet.columbus.oh.us>
     * Shaya Potter <spotter@capaccess.org>
     * Les Schaffer <godzilla@futuris.net>
     * Andy Sewell <puck@pookhill.demon.co.uk>
     * Gary Shea <shea@gtsdesign.com>
     * Stephane <sr@adb.fr>
     * Jan Vandenbos <jan@imaxx.net>
       
   ³o¥÷¤å¥óªºÂ½Ä¶¬O¥Ñ¥H¤U¼Æ¤H©Ò§¹¦¨ªº¡G
     * ¤¤¤å¡G Allex Juang<allex@ms2.accmail.com.tw>
     * ªk¤å¡G Olivier Tharan <tharan@int-evry.fr>
     * ¤é¤å¡G Kazuyuki Okamoto <ikko-@pacific.rim.or.jp>
       
10.3 ¦^õX

   °£¤F¼¶¼g³o¥÷ HOWTO¡BºûÅ@ [39]glibc 2 for Linux ³oºô­¶¡B¨Ã¥B¦b§Úªº¾÷¾¹¤W
   ¨Ï¥Î¤§¥~¡A§Ú»P glibc ­p¹º§¹¥þµLÃö¡A §Ú¤]¤£¤F¸Ñ³o¤è­±ªºÄ³ÃD¡A¦ý·|¾¨¥i¯à
   ªº¹ï±Hµ¹§Úªº°ÝÃD´£¨ÑÀ°§U¡C §Ú¤]«ÜÅwªï§A´£¥X¥ô¦óªº¦^õX¡B­×¥¿¡B©Î¬O«Øij¡A
   ½Ð±N¥¦­Ì±H¨ì [40]ejg3@cornell.edu¡C
   
10.4 Copyright.

   ¦¹¥÷¤å¥óªºª©ÅvÄÝ©ó Eric Green¡A³o¥÷¤å¥ó¥i¥H¦b LDP ªº°õ·Ó¤U´²§G¡C

References

   1. http://sunsite.unc.edu/LDP
   2. http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html
   3. file://localhost/tmp/zh-sgmltools.11151/Glibc2-HOWTO.txt.html#test-install
   4. file://localhost/tmp/zh-sgmltools.11151/Glibc2-HOWTO.txt.html#primary-install
   5. http://huizen.dds.nl/~frodol/glibc/
   6. http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html
   7. ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz
   8. ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz
   9. ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz
  10. ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz
  11. ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz
  12. ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.gz
  13. ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.gz
  14. ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-linux.tar.gz
  15. ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.gz
  16. ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-linux.bin.tar.gz
  17. ftp://ftp.ifi.uio.no/pub/gnu
  18. ftp://ftp.redhat.com/pub/redhat/
  19. ftp://ftp.debian.org/debian/dists/unstable/main/
  20. file://localhost/tmp/zh-sgmltools.11151/Glibc2-HOWTO.txt.html#specs
  21. file://localhost/tmp/zh-sgmltools.11151/Glibc2-HOWTO.txt.html#specs
  22. ftp://ftp.yggdrasil.com/private/hjl/
  23. http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl
  24. mailto:bugs@gnu.org
  25. mailto:bugs@gnu.ai.mit.edu
  26. http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl
  27. mailto:bugs-glibc@prep.ai.mit.edu
  28. mailto:bug-glibc-request@prep.ai.mit.edu
  29. http://www.gnu.org/software/libc/libc.html
  30. http://www.imaxx.net/~thrytis/glibc/
  31. http://huizen.dds.nl/~frodol/glibc/
  32. http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html
  33. news:comp.os.linux.development.system
  34. news:comp.os.linux.development.apps
  35. news:linux.dev.kernel
  36. news:gnu.bug.glibc
  37. mailto:Majordomo@ricardo.ecn.wfu.edu
  38. http://www.gnu.org/software/libc/libc.html
  39. http://www.imaxx.net/~thrytis/glibc
  40. mailto:ejg3@cornell.edu