LFS GCC-14.2.0 - 第一遍
GCC 依赖于 GMP、MPFR 和 MPC 这三个包。由于宿主发行版未必包含它们,我们将它们和 GCC 一同构建。将它们都解压到 GCC 源码目录中,并重命名解压出的目录,这样 GCC 构建过程就能自动使用它们:
第一遍构建gcc
cd $LFS/sources
VERSION=14.2.0
tar xf gcc-${VERSION}.tar.xz
cd gcc-${VERSION}
mpfr_VERSION=4.2.1
tar -xf ../mpfr-${mpfr_VERSION}.tar.xz
mv -v mpfr-${mpfr_VERSION} mpfr
gmp_VERSION=6.3.0
tar -xf ../gmp-${gmp_VERSION}.tar.xz
mv -v gmp-${gmp_VERSION} gmp
mpc_VERSION=1.3.1
tar -xf ../mpc-${mpc_VERSION}.tar.gz
mv -v mpc-${mpc_VERSION} mpc
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
mkdir -v build
cd build
../configure \
--target=$LFS_TGT \
--prefix=$LFS/tools \
--with-glibc-version=${VERSION} \
--with-sysroot=$LFS \
--with-newlib \
--without-headers \
--enable-default-pie \
--enable-default-ssp \
--disable-nls \
--disable-shared \
--disable-multilib \
--disable-threads \
--disable-libatomic \
--disable-libgomp \
--disable-libquadmath \
--disable-libssp \
--disable-libvtv \
--disable-libstdcxx \
--enable-languages=c,c++
make
make install
注意,刚刚构建的 GCC 安装了若干内部系统头文件。其中的 limits.h
一般来说应该包含对应的系统头文件 limits.h
。也就是 $LFS/usr/include/limits.h
。然而,在构建GCC的时候, $LFS/usr/include/limits.h
还不存在,因此GCC安装的内部头文件是一个不完整的、自给自足的文件,不包含系统头文件提供的扩展特性。这对于构建临时的Glibc已经足够,但是后续工作需要完整的内部头问加。所以必须执行下面的命令创建溢恶完整版本的内部头文件( 否则后续编译M4会出现 M4编译报错(limits.h) 错误):
生成完整的limits.h
cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h