protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai /etc/localtime cat > /etc/ld.so.conf << \/usr/local/lib /opt/lib EOF 删除编译目录 代码:
cd .. rm -rf glibc-build rm -rf glibc-2.5.1 相关知识:
glibc的测试比较容易出现错误,比如机器慢就有可能出现超时的错误,还有一些能引起错误的LFS手册上有所提及,像超时这种错误有时候很难避免,就跳过去吧。
调整工具链 代码:
mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld 调整specs文件:
- 36 -
代码:
gcc -dumpspecs | sed \\ -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g' \\ -e '/\\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \\ -e '/\\*cpp:/{n;s@$@ -isystem /usr/include@}' > \\ `dirname $(gcc --print-libgcc-file-name)`/specs 测试工具链是否被调整成功 echo 'main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep '/lib'
如果显示[Requesting program interpreter: /lib/ld-linux.so.2]表示调整成功,动态库已经连接到了目标系统的/lib下。
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log 应该显示
/usr/lib/crt1.o succeeded /usr/lib/crti.o succeeded /usr/lib/crtn.o succeeded grep -B1 '^ /usr/include' dummy.log 应该显示
#include <...> search starts here: /usr/include
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\\n|g' 应该显示
SEARCH_DIR(\ SEARCH_DIR(\ SEARCH_DIR(\grep \应该显示
attempt to open /lib/libc.so.6 succeeded
- 37 -
grep found dummy.log 应该显示
found ld-linux.so.2 at /lib/ld-linux.so.2
如果上面均显示正常,那么表明工具链调整成功,可以删除测试文件了 rm -v dummy.c a.out dummy.log
Binutils-2.17 代码:
tar xvf $LFS/binutils-2.17.tar.bz2 mkdir binutils-build cd binutils-build ../binutils-2.17/configure --prefix=/usr --enable-shared make tooldir=/usr 测试: 代码:
make check 这里测试统计可能会出现个别失败。 代码:
make tooldir=/usr install cp -v ../binutils-2.17/include/libiberty.h /usr/include cd .. rm -rf binutils-build rm -rf binutils-2.17
GCC-4.1.2 代码:
tar xvf $LFS/gcc-4.1.2.tar.bz2 - 38 -
cd gcc-4.1.2 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in sed -i 's@\\./fixinc\\.sh@-c true@' gcc/Makefile.in sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in mkdir -v ../gcc-build cd ../gcc-build ../gcc-4.1.2/configure --prefix=/usr \\ --libexecdir=/usr/lib --enable-shared \\ --enable-threads=posix --enable-__cxa_atexit \\ --enable-clocale=gnu --enable-languages=c,c++ make 测试: 代码:
make -k check 这里check时间比较长,可能会有一些错误发生 代码:
make install ln -sv ../usr/bin/cpp /lib ln -sv gcc /usr/bin/cc cd .. rm -rf gcc-build rm -rf gcc-4.1.2 重新测试工具链是否正确,确定GCC是否安装正确 echo 'main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log readelf -l a.out | grep 'lib'
如果显示[Requesting program interpreter: /lib/ld-linux.so.2]表示链接位置正确,动态库已经连接到了目标系统的/lib下。
- 39 -
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log 应该显示
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crt1.o succeeded /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crti.o succeeded /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../crtn.o succeeded grep -B3 '^ /usr/include' dummy.log 应该显示
#include <...> search starts here: /usr/local/include
/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include /usr/include
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\\n|g' 应该显示
SEARCH_DIR(\ SEARCH_DIR(\ SEARCH_DIR(\ SEARCH_DIR(\grep \应该显示
attempt to open /lib/libc.so.6 succeeded grep found dummy.log 应该显示
found ld-linux.so.2 at /lib/ld-linux.so.2
如果上面均显示正常,那么表明工具链正常,可以删除测试文件了 rm -v dummy.c a.out dummy.log
Berkeley DB-4.5.20 代码:
- 40 -