source: chapter05/glibc.xml@ 77d2cd8d

10.0 10.0-rc1 10.1 10.1-rc1 11.0 11.0-rc1 11.0-rc2 11.0-rc3 11.1 11.1-rc1 11.2 11.2-rc1 11.3 11.3-rc1 12.0 12.0-rc1 12.1 12.1-rc1 arm bdubbs/gcc13 ml-11.0 multilib renodr/libudev-from-systemd s6-init trunk xry111/arm64 xry111/arm64-12.0 xry111/clfs-ng xry111/lfs-next xry111/loongarch xry111/loongarch-12.0 xry111/loongarch-12.1 xry111/mips64el xry111/pip3 xry111/rust-wip-20221008 xry111/update-glibc
Last change on this file since 77d2cd8d was 77d2cd8d, checked in by Pierre Labastie <pieere@…>, 4 years ago
  • fix some gcc->GCC
  • remove commented text in glibc (chap 5), and fix a directory location

git-svn-id: http://svn.linuxfromscratch.org/LFS/branches/cross2@11934 4aa44e1e-78dd-0310-a6d2-fbcd4c07a689

  • Property mode set to 100644
File size: 8.0 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../general.ent">
5 %general-entities;
6]>
7
8<sect1 id="ch-tools-glibc" role="wrap">
9 <?dbhtml filename="glibc.html"?>
10
11 <sect1info condition="script">
12 <productname>glibc</productname>
13 <productnumber>&glibc-version;</productnumber>
14 <address>&glibc-url;</address>
15 </sect1info>
16
17 <title>Glibc-&glibc-version;</title>
18
19 <indexterm zone="ch-tools-glibc">
20 <primary sortas="a-Glibc">Glibc</primary>
21 <secondary>tools</secondary>
22 </indexterm>
23
24 <sect2 role="package">
25 <title/>
26
27 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
28 href="../chapter08/glibc.xml"
29 xpointer="xpointer(/sect1/sect2[1]/para[1])"/>
30
31 <segmentedlist>
32 <segtitle>&buildtime;</segtitle>
33 <segtitle>&diskspace;</segtitle>
34
35 <seglistitem>
36 <seg>&glibc-tmp-sbu;</seg>
37 <seg>&glibc-tmp-du;</seg>
38 </seglistitem>
39 </segmentedlist>
40
41 </sect2>
42
43 <sect2 role="installation">
44 <title>Installation of Glibc</title>
45
46 <para>First, create two symbolic links, which are needed for proper
47 operation of the dynamic library loader:</para>
48
49<screen><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
50ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen>
51
52 <para>Some of the Glibc programs use the non-FHS compliant
53 <filename class="directory">/var/db</filename> directory to store their
54 runtime data. Apply the following patch to make such programs store their
55 runtime data in the FHS-compliant locations:</para>
56
57<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
58
59 <para>The Glibc documentation recommends building Glibc
60 in a dedicated build directory:</para>
61
62<screen><userinput remap="pre">mkdir -v build
63cd build</userinput></screen>
64
65 <para>Next, prepare Glibc for compilation:</para>
66
67<screen><userinput remap="configure">../configure \
68 --prefix=/usr \
69 --host=$LFS_TGT \
70 --build=$(../scripts/config.guess) \
71 --enable-kernel=&min-kernel; \
72 --with-headers=$LFS/usr/include \
73 libc_cv_slibdir=/lib</userinput></screen>
74<!--
75 libc_cv_forced_unwind=yes \
76 libc_cv_c_cleanup=yes</userinput></screen> -->
77
78 <variablelist>
79 <title>The meaning of the configure options:</title>
80
81 <varlistentry>
82 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
83 <listitem>
84 <para>The combined effect of these switches is that Glibc's build system
85 configures itself to be cross-compiled, using the cross-linker and
86 cross-compiler in <filename class="directory">/tools</filename>.</para>
87 </listitem>
88 </varlistentry>
89
90 <varlistentry>
91 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
92 <listitem>
93 <para>This tells Glibc to compile the library with support
94 for &min-kernel; and later Linux kernels. Workarounds for older
95 kernels are not enabled.</para>
96 </listitem>
97 </varlistentry>
98
99 <varlistentry>
100 <term><parameter>--with-headers=$LFS/usr/include</parameter></term>
101 <listitem>
102 <para>This tells Glibc to compile itself against the headers
103 recently installed to the $LFS/usr/include directory, so that
104 it knows exactly what features the kernel has and can optimize
105 itself accordingly.</para>
106 </listitem>
107 </varlistentry>
108
109 <varlistentry>
110 <term><parameter>libc_cv_slibdir=/lib</parameter></term>
111 <listitem>
112 <para>This ensures that the library is installed in /lib instead
113 of the default /lib64 on 64 bit machines.</para>
114 </listitem>
115 </varlistentry>
116
117 </variablelist>
118
119 <para>During this stage the following warning might appear:</para>
120
121 <blockquote>
122<screen><computeroutput>configure: WARNING:
123*** These auxiliary programs are missing or
124*** incompatible versions: msgfmt
125*** some features will be disabled.
126*** Check the INSTALL file for required versions.</computeroutput></screen>
127 </blockquote>
128
129 <para>The missing or incompatible <command>msgfmt</command> program is
130 generally harmless. This <command>msgfmt</command> program is part of the
131 Gettext package which the host distribution should provide.</para>
132
133 <note><para>There have been reports that this package may fail when
134 building as a "parallel make". If this occurs, rerun the make command
135 with a "-j1" option.</para></note>
136
137 <para>Compile the package:</para>
138
139<screen><userinput remap="make">make</userinput></screen>
140
141 <para>Install the package:</para>
142
143 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
144 recommendations, you are building as root, the next command will install
145 the newly built glibc to your host system, which most likely will render it
146 unusable. So double check that the environment is correctly set for user
147 <systemitem class="username">lfs</systemitem>.</para></warning>
148
149<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
150
151 <variablelist>
152 <title>The meaning of the <command>make install</command> option:</title>
153
154 <varlistentry>
155 <term><parameter>DESTDIR=$LFS</parameter></term>
156 <listitem>
157 <para>The <envar>DESTDIR</envar> make variable is used by almost all
158 packages to define the location where the package should be
159 installed. If it is not set, it defaults to the root (<filename
160 class="directory">/</filename>) directory. Here we specify that
161 the package be installed in <filename class="directory">$LFS
162 </filename>, which will become the root after <xref linkend=
163 "ch-tools-chroot"/>.</para>
164 </listitem>
165 </varlistentry>
166
167 </variablelist>
168
169 <caution>
170 <para>At this point, it is imperative to stop and ensure that the basic
171 functions (compiling and linking) of the new toolchain are working as
172 expected. To perform a sanity check, run the following commands:</para>
173
174<screen><userinput>echo 'int main(){}' &gt; dummy.c
175$LFS_TGT-gcc dummy.c
176readelf -l a.out | grep '/ld-linux'</userinput></screen>
177
178 <para>If everything is working correctly, there should be no errors,
179 and the output of the last command will be of the form:</para>
180
181<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
182
183 <para>Note that for 32-bit machines, the interpreter name will be
184 <filename>/lib/ld-linux.so.2</filename>.</para>
185
186 <para>If the output is not shown as above or there was no output at all,
187 then something is wrong. Investigate and retrace the steps to find out
188 where the problem is and correct it. This issue must be resolved before
189 continuing on.</para>
190
191 <para>Once all is well, clean up the test files:</para>
192
193<screen><userinput>rm -v dummy.c a.out</userinput></screen>
194
195 </caution>
196
197 <note><para>Building packages in the next chapter will serve as an
198 additional check that the toolchain has been built properly. If some
199 package, especially binutils-pass2 or gcc-pass2, fails to build, it is
200 an indication that something has gone wrong with the
201 previous Binutils, GCC, or Glibc installations.</para></note>
202
203 <para>Now that our cross-toolchain is complete, finalize the installation
204 of the limits.h header. For doing so, run a utility provided by the GCC
205 developers:</para>
206
207<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
208
209 </sect2>
210
211 <sect2 role="content">
212 <title/>
213
214 <para>Details on this package are located in
215 <xref linkend="contents-glibc" role="."/></para>
216
217 </sect2>
218
219</sect1>
Note: See TracBrowser for help on using the repository browser.