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]