Glibc 2 HOWTO ���媩

��@ Eric Green, [email protected]
Ķ�� Allex Juang, [email protected]

  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 �dzƦ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 �dzƦ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�dzs�����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][email protected] (�ª���} [25][email protected] �]���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][email protected] �o�Ӷl���C��C ��
  �p�A�S���\Ū�s�D�s�� gnu.bug.glibc�A ����A�i�H�n�D
  [28][email protected] �[�J�o�ӦC��C

  �Ф��n�N GNU C �禡�w�����γ��i�e�� <[email protected]>�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][email protected]�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 ��
  <[email protected]> glibc 2 announcement �Ұ��Ӫ��A Andreas
  Jaeger <[email protected]> �h���ѤF���������γ��i�C

  �H�U�U�쳣���糧��󴣨Ѭ����T�H�ηN���G
    * Allex Juang<[email protected]>
    * Mark Brown <[email protected]>
    * Ulrich Drepper <[email protected]>
    * Scott K. Ellis <[email protected]>
    * Aron Griffis <[email protected]>
    * Andreas Jaeger <[email protected]>
    * Frodo Looijaard <[email protected]>
    * Ryan McGuire <[email protected]>
    * Shaya Potter <[email protected]>
    * Les Schaffer <[email protected]>
    * Andy Sewell <[email protected]>
    * Gary Shea <[email protected]>
    * Stephane <[email protected]>
    * Jan Vandenbos <[email protected]>

  �o�����½Ķ�O�ѥH�U�ƤH�ҧ������G
    * ����G Allex Juang<[email protected]>
    * �k��G Olivier Tharan <[email protected]>
    * ���G Kazuyuki Okamoto <[email protected]>

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�譱��ij�D�A���|���i��
  ����H���ڪ����D������U�C �ڤ]���w��A���X��󪺦^�X�B�ץ��B�άO��ij�A
  �бN���̱H�� [40][email protected]�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.23098/Glibc2-HOWTO.txt.html#test-install
  4. file://localhost/tmp/zh-sgmltools.23098/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.23098/Glibc2-HOWTO.txt.html#specs
 21. file://localhost/tmp/zh-sgmltools.23098/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:[email protected]
 25. mailto:[email protected]
 26. http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl
 27. mailto:[email protected]
 28. mailto:[email protected]
 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:[email protected]
 38. http://www.gnu.org/software/libc/libc.html
 39. http://www.imaxx.net/~thrytis/glibc
 40. mailto:[email protected]