source: chapter05/glibc.xml@ c18558c

xry111/arm64 xry111/arm64-12.0
Last change on this file since c18558c was c18558c, checked in by Xi Ruoyao <xry111@…>, 20 months ago

arm64: remove ld.so symlink creation

It's not need for ARM64!

  • Property mode set to 100644
File size: 8.1 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>Some of the Glibc programs use the non-FHS compliant
47 <filename class="directory">/var/db</filename> directory to store their
48 runtime data. Apply the following patch to make such programs store their
49 runtime data in the FHS-compliant locations:</para>
50
51<screen><userinput remap="pre">patch -Np1 -i ../glibc-&glibc-version;-fhs-1.patch</userinput></screen>
52
53 <para>The Glibc documentation recommends building Glibc
54 in a dedicated build directory:</para>
55
56<screen><userinput remap="pre">mkdir -v build
57cd build</userinput></screen>
58
59 <para>Ensure that the <command>ldconfig</command> and <command>sln</command>
60 utilities are installed into
61 <filename class="directory">/usr/sbin</filename>:</para>
62
63<screen><userinput remap="pre">echo "rootsbindir=/usr/sbin" &gt; configparms</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=/usr/lib</userinput></screen>
74
75 <variablelist>
76 <title>The meaning of the configure options:</title>
77
78 <varlistentry>
79 <term><parameter>--host=$LFS_TGT, --build=$(../scripts/config.guess)</parameter></term>
80 <listitem>
81 <para>The combined effect of these switches is that Glibc's build system
82 configures itself to be cross-compiled, using the cross-linker and
83 cross-compiler in <filename class="directory">$LFS/tools</filename>.</para>
84 </listitem>
85 </varlistentry>
86
87 <varlistentry>
88 <term><parameter>--enable-kernel=&min-kernel;</parameter></term>
89 <listitem>
90 <para>This tells Glibc to compile the library with support
91 for &min-kernel; and later Linux kernels. Workarounds for older
92 kernels are not enabled.</para>
93 </listitem>
94 </varlistentry>
95
96 <varlistentry>
97 <term><parameter>--with-headers=$LFS/usr/include</parameter></term>
98 <listitem>
99 <para>This tells Glibc to compile itself against the headers
100 recently installed to the $LFS/usr/include directory, so that
101 it knows exactly what features the kernel has and can optimize
102 itself accordingly.</para>
103 </listitem>
104 </varlistentry>
105
106 <varlistentry>
107 <term><parameter>libc_cv_slibdir=/usr/lib</parameter></term>
108 <listitem>
109 <para>This ensures that the library is installed in /usr/lib instead
110 of the default /lib64 on 64 bit machines.</para>
111 </listitem>
112 </varlistentry>
113
114 </variablelist>
115
116 <para>During this stage the following warning might appear:</para>
117
118 <blockquote>
119<screen><computeroutput>configure: WARNING:
120*** These auxiliary programs are missing or
121*** incompatible versions: msgfmt
122*** some features will be disabled.
123*** Check the INSTALL file for required versions.</computeroutput></screen>
124 </blockquote>
125
126 <para>The missing or incompatible <command>msgfmt</command> program is
127 generally harmless. This <command>msgfmt</command> program is part of the
128 Gettext package which the host distribution should provide.</para>
129
130 <note><para>There have been reports that this package may fail when
131 building as a "parallel make". If this occurs, rerun the make command
132 with a "-j1" option.</para></note>
133
134 <para>Compile the package:</para>
135
136<screen><userinput remap="make">make</userinput></screen>
137
138 <para>Install the package:</para>
139
140 <warning><para>If <envar>LFS</envar> is not properly set, and despite the
141 recommendations, you are building as
142 <systemitem class="username">root</systemitem>, the next command will
143 install the newly built glibc to your host system, which most likely
144 will render it unusable. So double check that the environment is
145 correctly set, before running the following command.</para></warning>
146
147<screen><userinput remap="install">make DESTDIR=$LFS install</userinput></screen>
148
149 <variablelist>
150 <title>The meaning of the <command>make install</command> option:</title>
151
152 <varlistentry>
153 <term><parameter>DESTDIR=$LFS</parameter></term>
154 <listitem>
155 <para>The <envar>DESTDIR</envar> make variable is used by almost all
156 packages to define the location where the package should be
157 installed. If it is not set, it defaults to the root (<filename
158 class="directory">/</filename>) directory. Here we specify that
159 the package be installed in <filename class="directory">$LFS
160 </filename>, which will become the root after <xref linkend=
161 "ch-tools-chroot"/>.</para>
162 </listitem>
163 </varlistentry>
164
165 </variablelist>
166
167 <para>Fix hardcoded path to the executable loader in
168 <command>ldd</command> script:</para>
169
170<screen><userinput remap="install">sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</userinput></screen>
171
172 <caution>
173 <para>At this point, it is imperative to stop and ensure that the basic
174 functions (compiling and linking) of the new toolchain are working as
175 expected. To perform a sanity check, run the following commands:</para>
176
177<screen><userinput>echo 'int main(){}' | gcc -xc -
178readelf -l a.out | grep ld-linux</userinput></screen>
179
180 <para>If everything is working correctly, there should be no errors,
181 and the output of the last command will be of the form:</para>
182
183<screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen>
184
185 <para>Note that for 32-bit machines, the interpreter name will be
186 <filename>/lib/ld-linux.so.2</filename>.</para>
187
188 <para>If the output is not shown as above or there was no output at all,
189 then something is wrong. Investigate and retrace the steps to find out
190 where the problem is and correct it. This issue must be resolved before
191 continuing on.</para>
192
193 <para>Once all is well, clean up the test file:</para>
194
195<screen><userinput>rm -v a.out</userinput></screen>
196
197 </caution>
198
199 <note><para>Building packages in the next chapter will serve as an
200 additional check that the toolchain has been built properly. If some
201 package, especially binutils-pass2 or gcc-pass2, fails to build, it is
202 an indication that something has gone wrong with the
203 previous Binutils, GCC, or Glibc installations.</para></note>
204
205 <para>Now that our cross-toolchain is complete, finalize the installation
206 of the limits.h header. For doing so, run a utility provided by the GCC
207 developers:</para>
208
209<screen><userinput>$LFS/tools/libexec/gcc/$LFS_TGT/&gcc-version;/install-tools/mkheaders</userinput></screen>
210
211 </sect2>
212
213 <sect2 role="content">
214 <title/>
215
216 <para>Details on this package are located in
217 <xref linkend="contents-glibc" role="."/></para>
218
219 </sect2>
220
221</sect1>
Note: See TracBrowser for help on using the repository browser.