Changes in chapter05/glibc.xml [1b1acbed:0ebda11]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
chapter05/glibc.xml
r1b1acbed r0ebda11 48 48 operation of the dynamic library loader:</para> 49 49 50 <screen ><userinput remap="pre">case $(uname -m) in50 <screen arch="default"><userinput remap="pre">case $(uname -m) in 51 51 i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3 52 52 ;; … … 55 55 ;; 56 56 esac</userinput></screen> 57 <!-- no ld-linux.so.2 here as multilib is based on x86_64, not on i686 --> 58 <screen arch="ml_32,ml_x32,ml_all"><userinput remap="pre">ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64 59 ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3</userinput></screen> 57 60 58 61 <para>Some of the Glibc programs use the non-FHS compliant … … 75 78 <para>Next, prepare Glibc for compilation:</para> 76 79 77 <screen ><userinput remap="configure">../configure \80 <screen arch="default"><userinput remap="configure">../configure \ 78 81 --prefix=/usr \ 79 82 --host=$LFS_TGT \ … … 83 86 libc_cv_slibdir=/usr/lib \ 84 87 libc_cv_rtlddir=/usr/lib</userinput></screen> 88 <screen arch="ml_32,ml_x32,ml_all"><userinput remap="configure">../configure \ 89 --prefix=/usr \ 90 --host=$LFS_TGT \ 91 --build=$(../scripts/config.guess) \ 92 --enable-kernel=&min-kernel; \ 93 --with-headers=$LFS/usr/include \ 94 --enable-multi-arch \ 95 libc_cv_slibdir=/usr/lib \ 96 libc_cv_rtlddir=/usr/lib</userinput></screen> 85 97 86 98 <variablelist> … … 195 207 </variablelist> 196 208 209 <!-- 210 The /usr which gets removed from the RTLDLIST by the sed 211 below is set by the libc_cv_rtlddir=/usr/lib above. When 212 changing the libc_cv_rtlddir to /lib, the content of the 213 ldd script does not need to be patched, but some other 214 symlinks created by glibc itself will be not that correct 215 and needs to be fixed by other symlinks. 216 217 First setting /usr and than removing /usr seems strange, 218 but it looks like that libc_cv_rtlddir has more effect than 219 only the pathes in ldd (it has influence on which symlinks 220 to the loader are created where) and makes the handling 221 in a multilib environment much easier. 222 To me, it feels better to go the way with adding/removing 223 /usr than to introduce a symlink hell. 224 225 Another option to get ldd working properly is to set a 226 symlink as "ln -svf lib /usr/lib64" but it has been reported 227 that we used that already years ago but dropped it since 228 libtool will complain sometimes with "library has been moved" 229 warnings. 230 Don't know if this is still the case - if not, this one 231 symlink seems to be the cleanest way and the sed on ldd will 232 be obsolete. 233 --> 197 234 <para>Fix hardcoded path to the executable loader in 198 235 <command>ldd</command> script:</para> … … 214 251 <screen><computeroutput>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</computeroutput></screen> 215 252 216 <para >Note that for 32-bit machines, the interpreter name will be253 <para arch="default">Note that for 32-bit machines, the interpreter name will be 217 254 <filename>/lib/ld-linux.so.2</filename>.</para> 218 255 … … 242 279 </sect2> 243 280 281 <!-- - - - - - - - - - --> 282 <!-- Multilib - 32bit --> 283 <!-- - - - - - - - - - --> 284 <sect2 arch="ml_32,ml_all"> 285 <title>Building Glibc - 32bit</title> 286 287 <para>Now recompile for m32. The extracted source can be 288 reused but needs to be cleaned before installing the m32 289 version of Glibc.</para> 290 291 <para>Clear the build directory and remove artefacts from 292 previous build:</para> 293 294 <screen><userinput remap="pre">make clean 295 find .. -name "*.a" -delete</userinput></screen> 296 297 <para>Configure Glibc for m32 with the following commands:</para> 298 299 <screen><userinput remap="configure">CC="$LFS_TGT-gcc -m32" \ 300 CXX="$LFS_TGT-g++ -m32" \ 301 ../configure \ 302 --prefix=/usr \ 303 --host=$LFS_TGT32 \ 304 --build=$(../scripts/config.guess) \ 305 --enable-kernel=&min-kernel; \ 306 --with-headers=$LFS/usr/include \ 307 --enable-multi-arch \ 308 --libdir=/usr/lib32 \ 309 --libexecdir=/usr/lib32 \ 310 libc_cv_slibdir=/usr/lib32 \ 311 libc_cv_rtlddir=/usr/lib32</userinput></screen> 312 313 <para>Compile the package:</para> 314 315 <screen><userinput remap="make">make</userinput></screen> 316 317 <para>Install the package:</para> 318 319 <screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install 320 cp -a DESTDIR/usr/lib32 $LFS/usr/ 321 install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \ 322 $LFS/usr/include/gnu/ 323 ln -svf ../lib32/ld-linux.so.2 $LFS/lib/ld-linux.so.2</userinput></screen> 324 325 326 <caution> 327 <para>At this point, it is imperative to stop and ensure that the basic 328 functions (compiling and linking) of the new toolchain are working as 329 expected. To perform a sanity check, run the following commands:</para> 330 331 <screen><userinput>echo 'int main(){}' > dummy.c 332 $LFS_TGT-gcc -m32 dummy.c 333 readelf -l a.out | grep '/ld-linux'</userinput></screen> 334 335 <para>If everything is working correctly, there should be no errors, 336 and the output of the last command will be of the form:</para> 337 338 <screen><computeroutput>[Requesting program interpreter: /lib/ld-linux.so.2]</computeroutput></screen> 339 340 <para>If the output is not shown as above or there was no output at all, 341 then something is wrong. Investigate and retrace the steps to find out 342 where the problem is and correct it. This issue must be resolved before 343 continuing on.</para> 344 345 <para>Once all is well, clean up the test files:</para> 346 347 <screen><userinput>rm -v dummy.c a.out</userinput></screen> 348 349 </caution> 350 351 </sect2><!-- m32 --> 352 353 <!-- - - - - - - - - - --> 354 <!-- Multilib - x32bit --> 355 <!-- - - - - - - - - - --> 356 357 <sect2 arch="ml_x32,ml_all"> 358 <title>Building Glibc - x32bit</title> 359 360 <para>Now recompile for mx32. The extracted source can be 361 reused but needs to be cleaned before installing the mx32 362 version of Glibc.</para> 363 364 <para>Clear the build directory and remove artefacts from 365 previous build:</para> 366 367 <screen><userinput remap="pre">make clean 368 find .. -name "*.a" -delete</userinput></screen> 369 370 <para>Configure Glibc for mx32 with the following commands:</para> 371 372 <screen><userinput remap="configure">CC="$LFS_TGT-gcc -mx32" \ 373 CXX="$LFS_TGT-g++ -mx32" \ 374 ../configure \ 375 --prefix=/usr \ 376 --host=$LFS_TGTX32 \ 377 --build=$(../scripts/config.guess) \ 378 --enable-kernel=&min-kernel; \ 379 --with-headers=$LFS/usr/include \ 380 --enable-multi-arch \ 381 --libdir=/usr/libx32 \ 382 --libexecdir=/usr/libx32 \ 383 libc_cv_slibdir=/usr/libx32 \ 384 libc_cv_rtlddir=/usr/libx32</userinput></screen> 385 386 <para>Compile the package:</para> 387 388 <screen><userinput remap="make">make</userinput></screen> 389 390 <para>Install the package:</para> 391 392 <screen><userinput remap="install">make DESTDIR=$PWD/DESTDIR install 393 cp -a DESTDIR/usr/libx32 $LFS/usr/ 394 install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-x32.h \ 395 $LFS/usr/include/gnu/ 396 ln -svf ../libx32/ld-linux-x32.so.2 $LFS/lib/ld-linux-x32.so.2</userinput></screen> 397 398 <caution> 399 <para>At this point, it is imperative to stop and ensure that the basic 400 functions (compiling and linking) of the new toolchain are working as 401 expected. To perform a sanity check, run the following commands:</para> 402 403 <screen><userinput>echo 'int main(){}' > dummy.c 404 $LFS_TGT-gcc -mx32 dummy.c 405 readelf -l a.out | grep '/ld-linux-x32'</userinput></screen> 406 407 <para>If everything is working correctly, there should be no errors, 408 and the output of the last command will be of the form:</para> 409 410 <screen><computeroutput>[Requesting program interpreter: /libx32/ld-linux-x32.so.2]</computeroutput></screen> 411 412 <para>If the output is not shown as above or there was no output at all, 413 then something is wrong. Investigate and retrace the steps to find out 414 where the problem is and correct it. This issue must be resolved before 415 continuing on.</para> 416 417 <para>Once all is well, clean up the test files:</para> 418 419 <screen><userinput>rm -v dummy.c a.out</userinput></screen> 420 421 </caution> 422 423 </sect2><!-- mx32 --> 424 244 425 <sect2 role="content"> 245 426 <title/>
Note:
See TracChangeset
for help on using the changeset viewer.