Glibc 2 HOWTO Eric Green, ejg3@cornell.edu v1.5, 8 February 1998 ª{ êK Kazuyuki Okamoto, ikko-@pacific.rim.or.jp ¡r¿ Toshinori Endo, tendo@nucleus.harvard.edu (v1.5© ç) v1.5, 1998N915ú GNU C Cu (glibcQÆ) glibc Glibc 2 HOWTOÍLinuxVXeãÅ ÌGNU C Libraryæ2Å (libc 6)ÌCXg[ÆgpÉ¢ÄྵܷB ______________________________________________________________________ Ú 1. ͶßÉ 1.1 glibc2É墀 1.2 ±Ì¶É墀 1.3 ±Ì¶ÌÅßÌÏX 2. CXg[û@ÌIð 3. CuÌæ¾ 4. eXgCuƵÄÌCXg[ 4.1 RpCÆCXg[ 4.1.1 Kvð 4.1.2 \[XÌWJ 4.1.3 Ýè 4.1.4 RpCÆCXg[ 4.2 _Ci~bN[_ÌAbvf[g 4.3 gccÌÝè 4.4 wb_[t@CÖÌNÌAbvf[g 4.5 CXg[®¹ÌmF 5. CÌCCuƵÄÌCXg[ 5.1 \[X©çÌCu\z 5.1.1 Kvð 5.1.2 \[XÌWJ 5.1.3 Ýè 5.1.4 RpC 5.2 CXg[Ìõ 5.3 oCipbP[W©çÌCXg[ 5.4 \[X©çÌCXg[ 5.5 gcc specst@CÌXV 5.6 CXg[®¹ÌmF 6. CCuÅÈ¢libcðgÁ½RpC 6.1 CÅÈ¢libcðg¤êÌÓ 6.2 eXgpglibcðgÁ½RpC 6.3 glibcªCCuÌÆ«Ìlibc5ðgÁ½RpC 7. C++vOÌRpC 7.1 eXgpglibcðg¤libg++ÌCXg[ 7.2 CCuƵÄglibcðg¤êÌlibg++ÌCXg[ 7.3 CCuÅÈ¢libcðgÁ½C++vOÌRpC 8. oO|[g 9. specs t@CÌá 10. »Ì¼ 10.1 ¼Ìîñ 10.1.1 Weby[W 10.1.2 j [XO[v 10.1.3 [OXg 10.2 Ó« 10.3 tB[hobN ______________________________________________________________________ 1. ͶßÉ 1.1. glibc2É墀 Glibc2ÍGNU CCuÌÅVÅÅ·B»ÝAÏXȵŮì·éÌÍA GNU HurdVXeÆLinux i386, m68k, alphaVXeÅ·BPowerPC, MIPS, Sparc, Sparc 64, ArmpÌLinuxü¯ÉÍ2.1ÅÅÎÌ\èÅ·B«IÉ ÍAÙ©ÌA[LeN`[ÆIy[eBOVXepÉàÎÌ\ èÅ·B LinuxÅÍ, glibc2 ÍLinux libc 5ÌãpAÂÜèlibco[W6 ƵÄp ¢çêÜ·BLinux libcJÒ½¿Ílibc5ðiglibc2Åju«·¦ÄµÜ¨ ¤ÆµÄ¢Ü·B 2.0.6ÌiKÅAglibcÍ\ªÈi¿ðÂƩȳêÄ¢ Ü·Bo[W2.1 (ߢ«\\èjÍAæè½Ì@íÖÚA³êA Vµ¢@\àÇÁ³êÄASIÉp¢çêéæ¤ÉÈéŵå¤B glibc2ÉÍAºLÌRÂÌAhIðÇÁÅ«Ü· Crypt UFCÌûpbP[WBAoK§Ì½ßAª£³êÄ¢éB LinuxThreads POSIX1003.1c pthreadC^[tF[XÌÀB Locale data localef[^t@C\zÉKvÈf[^ðÜÞB glibcÌÛ»@\ ðgp·éÆ«ÉgíêéB cryptÆLinuxThreadsÌAhIÍÇÁ·é±ÆðEßÜ·BgíÈ¢Æ Ù©ÌVXeÆÝ·«Éâ誶¶éÂ\«ª é©çÅ·Big¢½È ¢êÍAconfigureÀsÉ--disable-sanity-checksIvVðwè·é Kvª èÜ·jB 1.2. ±Ì¶É墀 ±ÌHOWTOÍù¶ÌLinuxVXeÖÌglibc2CuÌCXg[É¢ ÄLÚ³êĢܷBIntelx[XÌlibc5ðgpµ½VXeÌ[Uü¯É ©êĢܷªAÙ©ÌVXeâÙ©ÌCu(glibc1ÈÇ)ðgpµ Ä¢é[UàAt@C¼âA[LeN`¼ðKÉu«·¦é±ÆÉæ èLÚ³ê½îñðg¦é͸ŷB ±ÌHOWTOÌÅVÅÍLinux Documentation ProjectÌêƵÄAºLÌ¢¸ ê©ÌTCg©çüèÂ\Å· B Linux Documentation Project <http://sunsite.unc.edu/LDP> <http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html>. 1.3. ±Ì¶ÌÅßÌÏX o[W1.5Æ1.4Ìᢠo Ed BaileyÉæéõøÌtÁ o ÒÌemailAhXÌÏX o[W1.4Æ1.3Ìᢠo »ÝÌóµðÀ±iK©ç³®öJiKÖÏX o ÚAìÆVXeÌXgÌXV o ÅVo[Wð2.0.6ÖXV 2. CXg[û@ÌIð glibcðCXg[·éÉ͢©Ìû@ª èAù¶ÌCuðf tHgƵÄgpµ½ÜÜAeXgpÉ glibc2ðCXg[·é±Æà Å«Ü·B±Ìû@ÅÍAvOðRpC·éÛÉAIvVwè ÉæÁÄVµ¢Cuðg¤±ÆªÅ«Ü·B±Ìû@ðg¦ÎA«È PÉglibcðí·é±ÆªÅ«Ü·i½¾µglibcÉN³ê½vO ÍACuðí·éÆ®ìµÈÈèÜ·jB±ÌCXg[û@ ÍAoCifBXgr [VͶݵȢÌÅACuð\[X ©çRpC·éKvª èÜ·BCXg[û@Í ``eXgCu ƵÄÌCXg['' Åq×çêĢܷB ±Ì¶ÉLÚ³ê½à¤êÂÌCXg[û@ÍAglibcðCCu ƵÄg¤êÅ·B±Ìû@ÅÍAâCuðN·éæ¤È IvVwèðµÈ¢ÀèAVµRpC³êévOÍS Äglibcðg¤æ¤ÉN³êÜ·B±ÌêÍACuðoCi© çCXg[·é±Æ੪ÅRpC·é±ÆàÅ«Ü·BÅK»Ì xâÝèðÏXµ½¢êÍA\[XfBXgr [VðüèµÄA RpC·éKvª èÜ·B±ÌCXg[èÍ ``CÌCCu ƵÄÌCXg['' Åq×çêĢܷB Frodo LooijaardÍAÆ©ÌglibcÌCXg[û@ðq×ĢܷBÞÌû @Íglibcðæ2ÌCuƵÄglibcðgÁ½NXRpCÌÝèÉ Â¢ÄÌàÌÅ·B±Ìû@ÉæéCXg[ÌèÍA±Ì¶Ìue XgCuƵÄÌCXg[væè¡GÅ·ªA glibcðN·é ÛÌRpCwèªæèÈPÅ·B±Ìû@ÍÞÌ LinuxÖÌglibc2ÌC Xg[ <http://huizen.dds.nl/~frodol/glibc/>ÉLÚ³êĢܷB »ÝDebian1.3ðgÁÄ¢éªAglibcðg¤½ß¾¯ÉsÀèÈo[WÉ AbvO[h·é̪¢âÈêA Debian ÅÌ libc5 ©ç libc6ÖÌÚ s Mini-HOWTO <http://www.gate.net/~storm/FAQ/libc5-libc6-Mini- HOWTO.html> ðQlɵľ³¢BDebianpbP[WðgÁ½VXeÌ AbvO[hÌdûªLÚ³êĢܷB glibc2ðdvÈVXeÉCXg[·éÆ«ÍAeXgCXg[ð sÁ½ª¢¢©àmêܹñB Övg^Cvâ^ªÏX³êÄ¢é½ ßARpC·é½ßÉÍAC³ªKv©àmêÈ¢©çÅ·B 3. CuÌæ¾ glibc2ÍglibcpbP[WÆRÂÌAhIpbP[WALinuxThreads, Locale Crypt©çÈèÜ·B\[XÍȺÌTCgÅæ¾Â\Å·B o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz> SRpCÆCXg[ÉÍAñ150MBÌfBXNXy[XªKvÅ·B RACupbP[WÌÝÌî{oCiCXg[ÅÍñ50MBªKv Å·B 2.0.6ÌoCipbP[WÍܾõÅ·B2.0.4oCipbP[WÍ i386Æm68kpª èÜ·BalphapÍ2.0.1ª èÜ·B±êçͺL©çæ¾ Å«Ü·B o Intel x86: o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc- crypt-2.0.4.bin.i386.tar.gz> o Alpha: o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha- linux.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha- linux.tar.gz> o m68k: o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k- linux.bin.tar.gz> o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k- linux.bin.tar.gz> cryptAhIÉÍAoK§ª èÜ·BÄÈOÌ[UÍA <ftp://ftp.ifi.uio.no/pub/gnu>©ç澵ľ³¢B Red HatfBXgr [VðgpµÄ¢éêAglibc2pÌRPMð <ftp://ftp.redhat.com/pub/redhat/>©çæ¾Å«Ü·BGlibc2Í ½çµ ¢RedHatfBXgr [V5.0ÅÍCÌCCuÉÈÁÄ¢Ü ·B DebianfBXgr [VðgpµÄ¢éêAglibc2pÌpbP[Wð <ftp://ftp.debian.org/debian/dists/unstable/main/>ÅüèÅ«Ü·Bt@ C¼Ílibc6ÆÈÁĢܷBDebianÌhammo[WÅÍBglibc2ªî{ pbP[WÌêÈÁĨèADebian2.0ª[X³êéÆ«ÉÍAC ÌlibcÆÈé\èÅ·B 4. eXgCuƵÄÌCXg[ ±ÌßÅÍAglibc2ðeXgCuƵÄCXg[·éû@ÉÂ¢Ä à¾µÜ·BIvVwèðµÈ¢ÀèARpCµ½àÌÍAù¶Ì CuÉN³êÜ·B©ÈèÌÌt@CÉpXðLq·éKvª éÌÅA\[X©çCXg[ðsíÈÄÍÈçȢŵå¤B 4.1. RpCÆCXg[ 4.1.1. Kvð o ñ150MBÌófBXNXy[X o GNU make 3.75 o gcc >= 2.7.2 (2.7.2.1Èãª]ܵ¢) (ó ix86-LinuxÅ ÍAglibc-2.0.6ÌRpCÉÍgcc-2.8.1ÈãªKvÅ·) o binutils 2.8.1 (alphapÉÍsnapshotªKvj o bash 2.0 o autoconf 2.12 (configure.inðÏX·éÆ«ÌÝ) o texinfo 3.11 tCuÆAhIÌRpCÉAi586@133, 64MB RAMÅñ3ÔA tõÌi686@200ÅÍñ30ª©©èÜ·B 4.1.2. \[XÌWJ RpCÉÍ¢éOÉAA[JCu©ç\[XðWJ·éKvª èÜ·B àÁÆàÇ¢ÌÍÌû@Å·B 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 ±êÉæèlinuxthreads,crypt,localedatafBNgªglibc-2.0.6Éu© êAconfigureª±êçÌAhIðF¯Å«éæ¤ÉÈèÜ·B 4.1.3. Ýè glibc-2.0.6fBNgÉ compileÆ¢¤¼ÌfBNgð쬵A cdµ Ü·BìÆÍSÄ»±Ås¢Ü·B±êÉæèãÐt¯ªyÉÈèÜ·BiÜ ¾Amake cleanª®àøÉ®ì·éæ¤ÉÈÁĢȢ©çÅ·Bj mkdir compile cd compile ../configureðÀsµÜ·BAhIpbP[Wðg¤½ßÉÍA --enable- add-ons=--enable-add-ons=linux-threads,crypt,localedata Ìæ¤Éwè· éKvª èÜ·BCXg[æÌfBNgàwè·éKvª èÜ ·B/usr/i486-linuxglibc2Æ¢¤ÌªÇ¢Åµå¤BÅIIÉAR}h CÍÌæ¤ÉÈéŵå¤B ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2 4.1.4. RpCÆCXg[ RpCÆ`FbNͺLÌÊèÅ·B make make check make checkª¤Ü¢Á½çCuðCXg[µÜ·B make install 4.2. _Ci~bN[_ÌAbvf[g 1. Vµ¢ld.so©ç/lib/ld-linux.so.2ÖNð£èÜ·B ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2 ±ÌCu¾¯ªAvOÉN³êéàÌÌÈ©ÅBêêÌÅ è³êÄ¢éàÌÅ·B/libÖÌNðg¤±ÆÅAÀèÅÌglibcªÅ« ½Æ«ÉACÌCCuƵÄÌAbvO[hªeÕÉÈèÜ·B /etc/ld.so.confðÒWµÜ·B±ÌÛÉBCuÌ éfBNg¼ ÌãÉ/libðÁ¦éKvª èÜ·BÂÜè<prefix>/libÌæ¤ÉÈèAOq ÌឦÎA/usr/i486-linuxglibc2/libÆÈèÜ·B /etc/ld.so.confð ÒWãA ldconfig -v 4.3. gccÌÝè CXg[ÌÅãÌXebvÍAgccªVµ¢CuðF¯Å«éæ¤ É·é½ßÌ/usr/lib/gcc-libÌC³Å·BܸAù¶ÌÝèðRs[·éK vª èÜ·BÇÌÝ誻ÝgíêÄ¢éàÌ©ð²×éÉÍAgccÌ-vI vVðp¢Ü·B % gcc -v Reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs gcc version 2.7.2.2 ±ÌêÍAi486-unknown-linuxªVXeA2.7.2.2ªo[WÅ·B /usr/lib/gcc-lib/<VXe>ðeXgVXefBNgÉRs[µÜ ·B cd /usr/lib/gcc-lib/ cp -r i486-unknown-linux i486-linuxglibc2 eXgpÌVµ¢VXefBNgÆo[WfBNgÉÚ®µÜ ·B cd /usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2 »µÄA»ÌfBNgÌt@CspecsðÒWµÜ·B±Ìt@CÌ Ì/lib/ld-linux.so.1ð/lib/ld-linux.so.2 ÉÏXµÜ·BÜ ½A%{...:-lgmon}Ʃ꽪ðíµÜ·B glibcÍvt@CO ÉgmonCuðgpµÈ¢©çÅ·BTvÌspecst@CÍ ``specst@CÌTv'' ZNVðQƵľ³¢B 4.4. wb_[t@CÖÌNÌAbvf[g Vµ¢fBNg̺ÉAÙ©ÌfBNgÖÌNð£èÜ·B 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 ncursesÈÇAVµ¢fBNgÉwb_[t@Cðüêé׫Cu ðgpµÄ¢éêA/usr/include©çt@CðRs[·é©Nð£ èÜ·BiCuÉæÁÄÍAglibc2ÆêÉÄRpCµÈ¢ÆKØ É®ìµÈ¢à̪ èÜ·B»ÌêA»ÌpbP[WðPÉRpCµ Ä/usr/i486-linuxglibc2ÉCXg[µÄ¾³¢j 4.5. CXg[®¹ÌmF CXg[®¹ðmF·é½ßÉAÌvOðglibc.ct@CƵ Ä쬵ľ³¢B #include <stdio.h> main() { printf("hello world!\n"); } »µÄA"-b <base install directory> -nostdinc -I<install direc- tory>/include -I/usr/lib/gcc-lib/<new system dir>/ <gcc ver- sion>/include" Æ¢¤IvVÅRpCµÜ·B % 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 iójÌVXeÅͺLÌæ¤ÉµÈ¢Æ³µN³êܹñŵ ½B gcc -b i686-linuxglibc2 -nostdinc -I/usr/i686-linuxglibc2/include -I/usr/local/lib/gcc-lib/i686-linuxglibc2/2.8.1/include glibc.c -o glibc -L/usr/i686-linuxglibc2/lib i-LIvVªÝ»j lddðgÁÄAvOªÃ¢libcÅÍÈVµ¢glibc2ÉN³ê½± ÆðmFµÜ·B % ldd glibc libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.6.so (0x4000d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) RpCªÅ«ÄA³µ¢NªmFÅ«AÀsµ½Æ«É "hello world!"Æ¢¤bZ[WªoêÎACXg[ͬ÷Å·B 5. CÌCCuƵÄÌCXg[ ±ÌZNVÅÍAglibc2ðCÌCCuƵÄCXg[·é û@ðྵܷBVµRpC³êévOÍAIvVwèð µÈ¢ÀèA±ÌCuÉN³êéæ¤ÉÈèÜ·B Redhat©DebianðgÁÄ¢ÄAKØÈebt@Cð_E[hµ½ÌÅ ê ÎARedhat©DebianÌCXg[CXgNV𲺳¢B»Ìê A±ÌZNVÍÇÝòεĩܢܹñB 5.1. \[X©çÌCu\z ±ÌßÅÍA\[X©çglibc2ÆAhIðRpC·éû@ðà¾µÜ ·BÅK»xâÝèðÏXµ½¢êA¨æÑoCipbP[WÌÈ¢ êACuÌRpCªKvÉÈèÜ·B 5.1.1. Kvð o ñ150MBÌó«fBXNeÊ o GNU make 3.75 o gcc >= 2.7.2 (2.7.2.1ª]ܵ¢) (óF gcc-2.8.1ÈãªKvÅ·B) o binutils 2.8.1 (alphapÉÍsnapshotªKv) o bash 2.0 o autoconf 2.12 (configure.inðÏX·éê) o texinfo 3.11 i586@133, 64 MB RAMÌVXeÅÍASCuÆAhIÌRpC Éñ3Ô©©èÜ·BtõÌi686@200ÅÍAñ30ªÅ·B 5.1.2. \[XÌWJ RpC·é½ßÉÍAA[JCuðWJµÄ\[Xðæèo·Kvª è Ü·BÅÇÌû@ÍÌÊèÅ·B 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 ±êÉæèAlinuxthreads, crypt, localedatafBNgªglibc-2.0.6 fBNgàÉu©êAconfigureª±êçÌAhIðF¯Å«éæ¤É ÈèÜ·B 5.1.3. Ýè glibc-2.0.6fBNgàÉcompileÆ¢¤fBNgð쬵A»±Ö cdµÄASÄÌìÆð±ÌÅs¢Ü·B±êÉæèACXg[ãÌÁ ìƪyÉÈèÜ·BivOJÒªA'make clean'ðܾ®SÉ æ¤É͵ĢȢ©çÅ·Bj mkdir compile cd compile É../configureðÀsµÜ·BAhIpbP[Wðg¤½ßÉÍA --enable-add-ons=linux-threads,crypt,localedataÌæ¤ÉµÄIvV wè·éKvª èÜ·BCXg[·épXðwè·éKvà é©àµ êܹñBWIÈlinuxfBXgr [VÉí¹éÉÍA --prefix=/usrðwèµÜ·BilinuxVXeÅ/usrªprefixƵÄwè³ê éÆconfigureÍlibc.soâÙ©ÌdvÈCuð/libÉi[µAÙ©Ì pathðKØɲ®µÜ·BjÅIIÈR}hCÍÌæ¤ÉÈéÅµå ¤B ../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr 5.1.4. RpC RpCÆ`FbNÍÌÊèÅ·B make make check 5.2. CXg[Ìõ \[X©çCXg[·éêɹæAoCi©çCXg[·éê ɹæAVµ¢CuÌõ̽ßÉA¢Â©Ìt@CðÒð·éK vª èÜ·BVµRpC³êévOÍAglibcÉN³êÜ ·ªAâvO̤¿A®IÉN³ê½àÌÍlibc5É˶µÄ¢ é½ßAPÉâo[Wðã«·éí¯ÉÍs©È¢ÌÅ·B 1. ât@CðÒð·é½ßÌVµ¢fBNgð쬵ܷB mkdir -p /usr/i486-linuxlibc5/lib 2. âwb_[t@Cð/usr/include©çÒð³¹Ü·B mv /usr/include /usr/i486-linuxlibc5/include 3. Vµ¢includefBNgð쬵AÙ©ÌincludefBNgÖÌ Nð쬵ܷB 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++ fBXgr [VÉæÁÄÍANæð²®·éKvª é©àµê ܹñBÈÆàASlackwareÍg++wb_[t@Cð /usr/local/g++-includeÉu¢Ä èADebianÅÍ/usr/include/g++Éu¢Ä ÁÄA/usr/lib/g++-includeð/usr/include/g++ÉNµÄ èÜ·Bã ÒÌêÍA³Ìg++ includefBNgð/usr/includeÉߵĨ¢½û ªÇ¢Åµå¤B ãLÈOÌSÄÌwb_[t@CâNÌñðs¢Ü·BncursesÈÇ ÌñWCu̢©ÍAt@C©Æ©ÌincludefBNgÖ ÌNð/usr/includeÉu¢Ä¢Ü·B»¤¢Á½CuðKØÉgp ·é½ßÉÍA»êçÌt@CâNÌÝèðKتsíêÄ¢éKvª éÌÅ·B 4. Vµ¢CufBNgi/usr/i486-linuxlibc5/libjð /etc/ld.so.conft@CÌæªÉÁ¦Ü·B glibcªCXg[³ê½ ÆïÈbZ[WªoéÌðð¯é½ßÉÍA ld.so 1.8.8È~ð gÁ½ûªæ¢Åµå¤B 5. âCCuðVµ¢fBNgÉÚ®/Rs[µÜ·B 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 /usrª/ÆÍÊÌp[eBVÉ éêA libm.so.5Ælibc.so.5ÍAÚ® ¹¸ÉRs[µÄ¾³¢B±êçÍlinuxðN®·éÛÉgíêévO ªKvÆ·ét@CÅ èA[ghCup[eBVÉÈÄÍÈ çÈ¢©çÅ·B 6. /usr/lib/*.ot@CðVµ¢fBNgÉÚ®µÜ·B 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 7. CuðÚ®µ½çACuLbV ðXVµÜ·B ldconfig -v 5.3. oCipbP[W©çÌCXg[ glibcðRpCÏoCiðgÁÄCXg[·éÆ«ÍAÌæ¤É ·éKvª èÜ·B 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 ÙÈÁ½A[LeN`©o[WðgpµÄ¢éêÍAKÈt@C ¼ÉÇÝ֦ľ³¢B 5.4. \[X©çÌCXg[ Cuð\[X©çCXg[·éÉÍÌæ¤ÉµÜ·B make install ldconfig -v 5.5. gcc specst@CÌXV CXg[ÌÅIiKÍAoCi©çÌêà\[X©çÌêàA NªKØÉsíêéæ¤É·é½ßÌgcc specst@CÌXVÅ·B gccª ÇÌspecst@CðgÁÄ¢é©ð²×éÉÍAÌæ¤ÉµÄ¾³¢B % gcc -v reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs gcc version 2.7.2.2 ãÌáÅÍAi486-unknown-linuxªVXe¼A2.7.2.2ªo[WÔÅ ·B/usr/lib/gcc-lib/<VXe>ðâVXefBNgÉRs[µÜ ·B cd /usr/lib/gcc-lib/ cp -r i486-unknown-linux i486-linuxlibc5 ÉA³ÌfBNgÆo[WfBNgÉÚ®µÜ·B cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2 »µÄA»ÌfBNgÌspecst@CðRs[µÜ·B±Ìt@C ÅA/lib/ld-linux.so.1Ʃ꽪ð/lib/ld-linux.so.2ÉÏXµÜ·B ܽA%{...:-lgmon}Æ¢¤LqðSÄíµÜ·BglibcÍvt@CO ÉgmonCuðgíÈ¢½ßÅ·Bspecst@CÌáÍ ``specst@C Ìá'' ßðQƵľ³¢B 5.6. CXg[®¹ÌmF CXg[®¹ðmF·é½ßÉAÌvOðt@CƵÄ쬵 ľ³¢B #include <stdio.h> main() { printf("hello world!\n"); } »µÄARpCµÜ·B % gcc glibc.c -o glibc lddðgÁÄAvOªAâlibcÅÈVµ¢glibc2ÉN³êÄ¢ é±ÆðmFµÜ·B % ldd glibc libc.so.6 => /lib/libc.so.6 (0x4000e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) RpCª¤Üs«AvOðÀsµ½Æ«É"hello world!"Æ\¦ ³êêÎCXg[¬÷Å·B iójmake ðgpµÄRpC·éêAÝèÉàöèÜ·ªA /usr/bin/ccªÄÎêÄNª¤Üs©È¢±Æª èÜ·B±Ìê Agccð/usr/bin/ccÉRs[·é©A«ÏiܽÍmake}NjCCð gccðw·æ¤ÉÏXµÄ¾³¢B 6. CCuÅÈ¢libcðgÁ½RpC vOÌRpCÌÛACCuÈOÌCuðgÆ¢¤ ±Æà éŵå¤B±ÌZNVÅÍA±Ìæ¤ÈêÉǤµ½çÇ¢ Ì©ðAOÌ2ßÌfBNgÆCXg[¼ðgÁÄྵܷBÀÛ Égp·éÆ«ÍAe©ÌÝèÉí¹Ä¼OðÇÝ֦ĺ³¢B 6.1. CÅÈ¢libcðg¤êÌÓ VXeu[gvZXªgp·évOðRpC·éÍAÓª KvÅ·BvOª®IÉN³êÄ¢ÄA©Â[gÅÈ¢p[eB Vª}Eg³êéOÉgp³êévOÅ éêÉÍAN³ êéSÄÌCuª[gp[eBVÉÈÄÍÈèܹñBOßÌ CCuƵÄglibcðCXg[·éêÌà¾É]¦ÎAà ¢libcÍ[gp[eBVãÌ/libÉc³êéÌÅAu[gvZXA SÄÌvOªK³É®ì·é͸ŷBµ©µA/usrªÊÌp[eB VÉ ÁÄAglibcðeXgCuƵÄ/usr/i486-linuxglibc2ÉC Xg[µ½êA glibcðgÁÄRpC³ê½Vµ¢vO ÍA/usr p[eBVª}Eg³êéÜÅ®ìµÜ¹ñB 6.2. eXgpglibcðgÁ½RpC eXgpÉCXg[³ê½glibcðgÁÄRpC·éÆ«ÍAglibc Ìincludeðw·æ¤ÉincludepXðÄÝè·éKvª èÜ ·B"-nostdinc" wèÉæÁÄAÊíÌpXð³øÉ µA"-I/usr/i486-linuxglibc2/include" ðwè·é±ÆÅAglibc includeðwèÅ«Ü·Bgcc includeàwè·éwè·éKvª èÜ·B± êÍ/usr/lib/gcc-lib/i486-linuxglibc2/ 2.7.2.2/include É èÜ·B(e XgpCuªi486-linuxglibc2Å gccÌo[Wª2.7.2.2Ìêj eXgpglibcÖvOðN·éêÍAgccÌÝèðwè·éKvª èÜ·B±êÉÍA"-b i486-linuxglibc2"IvVðg¢Ü·B ½ÌvOÅÍAmakefileÌ$CFLAGSÆ $LDFLAGSIvVðºLÌæ ¤ÉÝè·é±ÆÅVµ¢IvVÌwèªÅ«Ü·B 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 configureXNvgðgÁÄ¢éêAconfigureðÀs·éOÉ $CFLAGSÆ$LDFLAGSVFÏðè`µÜ·icsh/tcshÌê env/setenv,sh/bashÅÍset/exportðgpjB±êÉæÁĶ¬³ê émakefileÍKØÈ$CFLAGSÆ $LDFLAGSðÜñÅ¢é͸ŷB½¾µASÄ ÌXNvgª±êçÌÏðmF·éí¯ÅÍÈ¢ÌÅA configureðÀs µ½ãAmakefileðmFµAKvɶÄÒWµÄ¾³¢B RpCµæ¤ÆµÄ¢évOªAgccÌÝðgpµÄ¢éÆ«Í icppâbinutilsfBNgð¼ÚgpµÈ¯êÎjAºLÌXNvgð g¦ÎñSIvVðw蹸ÉÏÝÜ·B #!/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 "$@" You can then use this script instead of "gcc" when compiling. gccÌã íèɱÌXNvgðgpµÄ¾³¢B 6.3. glibcªCCuÌÆ«Ìlibc5ðgÁ½RpC glibcðCCuƵÄCXg[µÄ éÆ«ÉAâCu ðgÁÄvOðRpC·éÉÍAâCupÉpXðÄÝ è·éKvª èÜ·B±êÉÍA"-nostdinc"IvVðwèµÄÊíÌ pXð³øɵA"-I/usr/i486-linuxlibc5"ðgÁÄglibc(*) ÌincludefB NgðwèµÜ·BܽA"-I/usr/lib/gcc- lib/i486-linuxlibc5/2.7.2.2/include" ðwèµÄgccÁLÌincludet@C fBNgðwèµÜ·BȨApX¼Íe©ÌÝèâgcco[WÉ í¹Ä²®µÄ¾³¢B (*ój libc5ÌÔá¢ÆvíêÜ·B âlibcÉvOðN·éÉÍAgccÌÝèðwè·éKvª èÜ ·B±êÍAIvV"-b i486-linuxlibc5"ðwè·êÎOKÅ·B ½ÌvOÅÍBmakefileÅ$CFLAGSÆ $LDFLAGSÉVµ¢IvV ðÁ¦êÎæ¢Í¸Å·B 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 configureXNvgðgÁÄ¢éÆ«ÍAconfigureÀsOÉAVFÏ $CFLAGSÆ$LDFLAGSðè`µÜ· (csh/tcshÅÍenv/setenv, sh/bashÅ Íset/exportðgpjB©®¶¬³ê½makefileÉÍAKØÉ$CFLAGSÆ $LDFLAGSªLq³êÄ¢é͸ŷªASÄÌconfigureXNvgª±êð sÁÄêéí¯ÅÍÈ¢ÌÅA configureÀsãmakefileðmFµAKvÉ ¶ÄÒWµÄ¾³¢B àµARpCµæ¤ÆµÄ¢évOªgccÌÝðÄÑoµÄ¢éÈ çÎicppâbinutilsð¼ÚKvƵĢȢÈçÎjAºLÌXNvgð g¦ÎAñIvVðwèµÈÄà·ÝÜ·B #!/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 "$@" You can then use this script instead of "gcc" when compiling. RpCÉ"gcc"Ìãíèɱêðg¦ÎÇ¢í¯Å·B 7. C++vOÌRpC libg++ÍwCuÌêðgpµÄ¢éÌÅAlibmÉN³êÄ¢Ü ·Bù¶Ìlibg++ÍâCuðgp·éæ¤ÉRpC³êÄ¢éÅ µå¤©çAlibg++ðglibcðgÁÄÄRpC·é©AoCiÅðüè ·éKvª èÜ·BÅVÌlibg++\[XÆAglibcÉN³ê½oCi ix86pjÍ <ftp://ftp.yggdrasil.com/private/hjl/>É èÜ·B 7.1. eXgpglibcðg¤libg++ÌCXg[ glibcðeXgCuƵÄCXg[µ½êAglibcƯ¶fBN gÉlibg++Ìt@CàCXg[·éKvª èÜ·iOßÌáÅÍ /usr/i486-linuxglibc2jBoCipbP[W©çCXg[·éêÍ i©gͱÌæ¤ÉµÄlibg++ðRpCµ½±Æª èܹñªAൠ»Ìæ¤Èà̪ éÆ·êÎA¨··ßµÜ·jAt@Cðe| fBNgÉWJµÄ©çAusr/libÌt@Cð<CXg[æfBN g>/lib/Ö usr/libfBNgÌt@Cð<CXg[æfBNg >/lib/fBNgÖiͶßÉinclude/g++ ÌNðíµÄ¨±Æ ð¨YêÈIj»µÄAusr/bin/ Ìt@Cð<CXg[æfBNg >/bin/fBNgÖÚ®µÜ·B 7.2. CCuƵÄglibcðg¤êÌlibg++ÌCXg[ glibcðCCuƵÄCXg[µ½êÅAg++vOðÈ OÌCCuÆÆàÉgpµ½¢ÈçÎAܸAâlibg++t@Cðà ¢ libcfBNgÉÚ®µÜ·B½ÔñêÔÈPÈû@ÍAOßÅྵ ½æ¤ÉµÄlibc5ðgÁÄlibg++ðRpCµÄCXg[µAÉ glibcÅðÊíǨèCXg[·é±ÆÅ·B 7.3. CCuÅÈ¢libcðgÁ½C++vOÌRpC C++vOðCÅÈ¢libcÆÆàÉgpµ½êAg++ÌincludefB Ngðinclude·éæ¤Éwè·éKvª èÜ·BãÌឦÎAe XgpglibcÈç/usr/i486-linuxglibc2/include/g++ACÌglibcÈç /usr/i486-linuxlibc5/include/g++ÉÈèÜ·B±Ì½ßÉÍÊíA $CXXFLAGSÏwèðtÁµÜ·B 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 8. oO|[g àµCuÉoOª éÆv¤Æ«ÍAܸÉFAQÉÚðʵľ³ ¢BÙ©Ìlª·ÅɱÌâèð©Â¯Ä¢ÄAÈPÈðû@ª¦³êÄ¢ é©àµêܹñBܽAINSTALLt@CàÌ"GNU CCuðCXg [·é½ß̧c[ (Recommended Tools to Install the GNU C Library)"ÌÚàmFµÄ¾³¢BoOÉæÁÄÍA glibc©gÌàÌÅ ÍÈAÙ©Ìc[É´öÌ éÂ\«ª é©çÅ·B oOð©Â¯½çܸA»êª{ÉoO©Ç¤©m©ßľ³¢BmFÌ ½ßÌÇ¢û@ÍAGNU CCuª¼ÌCuƯ¶®ìð·é©Ç ¤©mßé±ÆÅ·B൮쪯¶ÈçA¨»çÔáÁÄ¢éÌÍ È½ ÅAiK¸µà»¤Æ;¦Ü¹ñªjCuͳµ¢Ìŵå¤B»¤ ÅȯêÎA½ÔññÇ¿ç©ÌCuªÔáÁÄ¢éÌŵå¤B ÉA <http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>És«AoO f[^x[XðmFµÄA¯¶âèªñÏÅÈ¢©Ç¤©mFµÜ·Bª ©ÁÄ¢éoOÉ¢ÄÍA(libcƤÉzz³êÄ¢é)BUGSàmF·×«Å ·B Vµ¢oO¾Æ¢¤±ÆªmFÅ«½çAâèðĻūéÅáÀÌeXgP [XÌÍÍÜÅâèÌð·ßľ³¢BCCuÌêÍAÂ\ÈÀ èAêÂÌCuÖÄÑoµÉÜÅâèð·ßé׫ŷB±êͳ٠ÇïµÈ¢Åµå¤B ÈPÈeXgP[XÉié±ÆªÅ«½çAÅãÌXebvÍoOðñ·é ±ÆÅ·BoOðñ·éÆ«ÍAeXgP[XAÀÛɾçê½ÊÆúÒ ³êéÊA»µÄiൠêÎj±ÌâèÌ´öÆl¦çêévöAeXg ÉgÁ½VXeÌíÞAGNU CCuÆGNU CRpCA GNU BinutilsÌo[WðÁľ³¢BconfigureÉæÁĶ¬³ê½ config.statusÆconfig.makeàÜßľ³¢B±êçÍAconfigureðÀs µ½Æ«ÌJgfBNgÉ èÜ·B GNU CCuÌoOÍAGNU libcÉt®ÌglibcbugVFXNvgð gÁÄ <mailto:bugs@gnu.org>ÖÁľ³¢(âAhX <mailto:bugs@gnu.ai.mit.edu>àܾg¦Ü·jB é¢ÍA <http://www- gnats.gnu.org:8080/cgi-bin/wwwgnats.pl> ©çAGNATS WEBC^[tF[ XðgÁÄe·é±ÆàÅ«Ü·B ñÄâ¿âÍ[OXg <mailto:bugs-glibc@prep.ai.mit.edu> Ö Áľ³¢BàµAgnewsgroup gnu.bug.glibc ðÇñŢȢêA <mailto:bug-glibc-request@prep.ai.mit.edu> É¿·êÎAXgðæè ñ¹é±ÆªÅ«Ü·B GNU CCuÌoO|[gð <bug-gcc@prep.ai.mit.edu>Éé±ÆÍ ð¯Ä¾³¢B±¿çÍAGNU CCÌoO|[g̽ßÌàÌÅ·B GNU CCÍÊÌlXÉæÁÄeiX³êĨèAGNU CCuÆÍʨ¾ ©çÅ·B 9. specs t@CÌá ±±ÅÍAgccªRpCÆNÉgp·é glibc2 pÌspecs t@C ÌáðÐîµÜ·B±Ìt@CÍA/usr/lib/gcc-lib/ <Vµ¢VXe fBNg>/<gccÌo[W>É èÜ·B x86VXeðgpµÄ¢é êA±ÌZNVÌàeð»ÌÜÜt@CÉRs[·êÎÇ¢Åµå ¤B *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: . ; 10. »Ì¼ 10.1. ¼Ìîñ 10.1.1. Weby[W o FSFÌGNU C Cuz[y[W <http://www.gnu.org/software/libc/libc.html> o LinuxÅGNU Libc2ðg¤ <http://www.imaxx.net/~thrytis/glibc/> o LinuxÉglibc-2ðCXg[·é <http://huizen.dds.nl/~frodol/glibc/> o DebianÅÌlibc5©çlibc6ÌÚsMini-HOWTO <http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html> 10.1.2. j [XO[v o comp.os.linux.development.system o comp.os.linux.development.apps o linux.dev.kernel o gnu.bugs.glibc 10.1.3. [OXg Glibc2 LinuxfBXJbVXg ±ÌXgÍVµ¢GNU CCuÅ églibc2ðCXg[µ½ Linux[UÔÅÌîñð·ðÓ}µ½àÌÅ·BgsbNÍÝ·«© çALinux/glibcZbgÅÌRpCÉ¢ÄÌ¿âÌàÌÜÅÜÝ Ü·BwÇ·éÉÍAMajordomo@ricardo.ecn.wfu.edu¶É subscribe glibc-linux < ȽÌemailAhX> Æ¢Ä[ðÁľ³ ¢B 10.2. Ó« fÚµ½îñÌÙÆñÇÍAGNU Libc WEBy[W GNU Libc web page <http://www.gnu.org/software/libc/libc.html> ÆUlrich Drepper's <dreppers@gnu.ai.mit.edu> glibc2 AiEXA¨æÑÞÌRg©ç ÆÁÄ«½àÌÅ·B Andreas Jaeger <aj@arthur.rhein-neckar.de> ÍAo O|[gÌßÉ¢ÄÌîñÌêðñµÄêܵ½B ȺÍîññ¨æѱ̶É¢ÄÌtB[hobNðµÄê½l½¿ Å·B o Allex <allex@ms2.accmail.com.tw> o Mark Brown <M.A.Brown-4@sms.ed.ac.uk> o Ulrich Drepper <drepper@gnu.ai.mit.edu> o Scott K. Ellis <ellis@valueweb.net> o Aron Griffis <agriffis@coat.com> o Andreas Jaeger <aj@arthur.rhein-neckar.de> o Frodo Looijaard <frodol@dds.nl> o Ryan McGuire <rmcguire@freenet.columbus.oh.us> o Shaya Potter <spotter@capaccess.org> o Les Schaffer <godzilla@futuris.net> o Andy Sewell <puck@pookhill.demon.co.uk> o Gary Shea <shea@gtsdesign.com> o Stephane <sr@adb.fr> o Jan Vandenbos <jan@imaxx.net> |óͺLÌl½¿ªsÁĢܷB o ê: Allex <allex@ms2.accmail.com.tw> o tXê: Olivier Tharan <tharan@int-evry.fr> o ú{ê: Kazuyuki Okamoto <ikko-@pacific.rim.or.jp> (ó) ú{êv1.5Éu¢ÄAºLÌl½¿©ç¾Æ¦Íð¸«Üµ½B ih̪j o ª{êK <ikko-@pacific.rim.or.jp> o ì¬æüå <nakano@apm.seikei.ac.jp> o ìasahi-net <sx3m-nkn@asahi-net.or.jp> o ìÝÇ¡ <kawagisi@ky.rim.or.jp> 10.3. tB[hobN ©gÍA±ÌHOWTOð±ÆALinux p glibc2Ìz[y[W glibc 2 for Linux <http://www.imaxx.net/~thrytis/glibc> ð۵Ģé±ÆA glibc2 ðgÁÄ¢é±ÆÈOAglibc vWFNgÉÍÖ^µÄ¢Ü¹ñB [ÅçêÄ«½â¢í¹ÉÍÈéצçêéæ¤wÍ͵Ģé àÌÌAÍ glibc2 É¢Äm¯ª\ªÉ èܹñBtB[hobNAù ³AñÄÈÇͽ}µÜ·ÌÅ ejg3@cornell.edu ¶É¨è¢µÜ·B (ó) ú{êó (v1.5)ÉÖµÄÍA¡r¿ <mailto:tendo@fas.harvard.edu>֨袵ܷB Copyright (c) 1997 by Eric Green. (´¶) Copyright (c) 1997 by Kazuyuki Okamoto (ú{êó) Copyright (c) 1998 by Toshinori Endo (ú{êó) ±Ì¶ÍLDPCZXÉîâÄzzÂ\Å·B