在构建lfs系统之前我们需要构建脱离宿主系统的新的工具链,然后在使用新的工具链构建其他基础的工具。这样做的目的减少宿主系统的依赖和影响。
构建出来的新工具链会放在$LFS/tools 的文件夹中,让其与后面安装的文件和宿主系统生成的目录分开,防止污染后面要制作的lfs系统。
构建临时lfs系统
解压包命令:
tar -xjf ***
附:在没有特殊说明的情况下,编译安装完一个就删除掉解压后的目录
1. Binutils-2.26
进入到Binutils-2.26目录下,创建编译目录:
mkdir -v build
cd build
进行编译配置:
…/configure --prefix=/tools
–with-sysroot=$LFS
–with-lib-path=/tools/lib
–target=$LFS_TGT
–disable-nls
–disable-werror
开始编译:
make
由于我使用的是x86_64架构平台,所以需要创建符号链接:
case $(uname -m) in
x86_64) mkdir -v /tools/lib && ln -sv lib /tools/lib64 ;;
esac
安装编译结果:
make install
2. GCC-5.3.0
还记得第一张的准备工作中,检查宿主机的库时,有如下的输出:
libgmp.la: not found
libmpfr.la: not found
libmpc.la: not found
说明当前宿主机没有这三个库,所以我们解压sources目录下的这三个包,并重命名,使得编译gcc的时候可以识别到这三个库。
tar -xf …/mpfr-3.1.3.tar.xz
mv -v mpfr-3.1.3 mpfr
tar -xf …/gmp-6.1.0.tar.xz
mv -v gmp-6.1.0 gmp
tar -xf …/mpc-1.0.3.tar.gz
mv -v mpc-1.0.3 mpc
以上是将这三个包解压后,移动到gcc的编译目录下。
以下命令将更改GCC默认动态链接器的位置,以使用/ tools中安装的链接器。 它还从GCC的include搜索路径中删除/ usr / include:
for file in
$(find gcc/config -name linux64.h -o -name linux.h -o -name sysv4.h)
do
cp -uv $file{,.orig}
sed -e ‘s@/lib(64)?(32)?/ld@/tools&@g’
-e ‘s@/usr@/tools@g’ $file.orig > $file
echo ’
#undef STANDARD_STARTFILE_PREFIX_1
#undef STANDARD_STARTFILE_PREFIX_2
#define STANDARD_STARTFILE_PREFIX_1 “/tools/lib/”
#define STANDARD_STARTFILE_PREFIX_2 “”’ >> $file
touch $file.orig
done
以上具体的含义详见lfs7.9文档。
同Binutils-2.26,创建build目录:
mkdir -v build
cd build
配置命令如下:
…/configure
–target=$LFS_TGT
–prefix=/tools
–with-glibc-version=2.11
–with-sysroot=$LFS
–with-newlib
–without-headers
–with-local-prefix=/tools
–with-native-system-hea