手把手教你如何建立自己的Linux系统 - 第二版(8)

2019-01-19 11:18

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 -


手把手教你如何建立自己的Linux系统 - 第二版(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生态系统稳定性之教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: