vii. 宿主系统需求

你的宿主机应该安装有以下的软件包,且软件包的版本不能低于标注的版本(译者注:事实上版本低于标注版本也可能通过,所以 Linux 内核版本稍低而无法安装更高版本软件的用户也不必过于担心。例如译者的系统是 Ubuntu 14.04,其中有好多软件版本就低于指定版本,但仍然能成功构建)。对于大部分现代 Linux 来说应该不是什么问题。不少发行版可能会将开发用到的头文件单独打包,并且命名为 “<package-name>-devel” 或是 “<package-name>-dev” 这样的形式。务必保证这样的包都已经装上!

可能某些软件包的版本低于以下标注的版本也可以工作,不过我们不能一一测试。

需要注意的是,通过学习本文构建 LFS 系统,必须包含上文提及的所有文件链接。那些链接假如指向其它的软件(例如 dash,mawk 等) ,也许依旧可以构建系统,但是开发团队并没有做过系统的测试,而且可能会在执行一些命令或者应用某些补丁的时候出现问题。(译者注:这句话的本义是,本书建议构建 LFS 建议使用的 sh 应该是 bash,但是假如你喜欢 dash,这并不一定不行,但是假如出问题,那也是在情理之中的事情。)

请执行以下命令,查看宿主机的各个软件包的版本以及编译环境是否准备妥当:

cat > version-check.sh << "EOF"


#!/bin/bash


# Simple script to list version numbers of critical development tools


export LC_ALL=C


bash --version | head -n1 | cut -d" " -f2-4


echo "/bin/sh -> `readlink -f /bin/sh`"


echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-


bison --version | head -n1


if [ -h /usr/bin/yacc ]; then


echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`";


elif [ -x /usr/bin/yacc ]; then


echo yacc is `/usr/bin/yacc --version | head -n1`


else


echo "yacc not found"


fi


bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-


echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2


diff --version | head -n1


find --version | head -n1


gawk --version | head -n1


if [ -h /usr/bin/awk ]; then


echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`";


elif [ -x /usr/bin/awk ]; then


echo yacc is `/usr/bin/awk --version | head -n1`


else


echo "awk not found"


fi


gcc --version | head -n1


g++ --version | head -n1


ldd --version | head -n1 | cut -d" " -f2- # glibc version


grep --version | head -n1


gzip --version | head -n1


cat /proc/version


m4 --version | head -n1


make --version | head -n1


patch --version | head -n1


echo Perl `perl -V:version`


sed --version | head -n1


tar --version | head -n1


makeinfo --version | head -n1


xz --version | head -n1


echo 'main(){}' > dummy.c && g++ -o dummy dummy.c


if [ -x dummy ]


then echo "g++ compilation OK";


else echo "g++ compilation failed"; fi


rm -f dummy.c dummy


EOF


bash version-check.sh


译者注:这里给出一个典型的输出(当前译者使用的系统为:LSB Version:1.4,Distributor ID:Arch,Description:Arch Linux,Release:rolling
Codename:n/a)
bash, version 4.3.33(1)-release
/bin/sh -> /usr/bin/bash # 这里 sh 是到 bash 的硬链接
Binutils: (GNU Binutils) 2.25.0 # 版本正好是 2.25(好险)
bison (GNU Bison) 3.0.4
yacc is bison (GNU Bison) 3.0.4 # yacc 是到 bison 的硬链接
bzip2, Version 1.0.6, 6-Sept-2010.
Coreutils: 8.23
diff (GNU diffutils) 3.3
find (GNU findutils) 4.4.2
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p11, GNU MP 6.0.0)
/usr/bin/awk -> /usr/bin/gawk # awk 是到 gawk 的硬链接
gcc (GCC) 4.9.2 20150304 (prerelease)
g++ (GCC) 4.9.2 20150304 (prerelease)
(GNU libc) 2.21 # glib 的版本是 2.21
grep (GNU grep) 2.21
gzip 1.6
Linux version 4.0.0-2-ARCH (builduser@tobias) (gcc version 4.9.2 20150304 (prerelease) (GCC) )
m4 (GNU M4) 1.4.17
GNU Make 4.1
GNU patch 2.7.5
Perl version='5.20.2';
sed (GNU sed) 4.2.2
tar (GNU tar) 1.28
makeinfo (GNU texinfo) 5.2
xz (XZ Utils) 5.2.1
g++ compilation OK
# 编译器功能正常

同时,还请进行库文件的一致性检查:

cat > library-check.sh << "EOF"


#!/bin/bash


for lib in lib{gmp,mpfr,mpc}.la; do


echo $lib: $(if find /usr/lib* -name $lib|


grep -q $lib;then :;else echo not;fi) found


done


unset lib


EOF


bash library-check.sh


这些文件应该要么都在或者是都缺失,而不应该只有一两个。

Host by Unixetc 

出售域名!  关于Linux