Linux From Scratch(LFS11.0)编译交叉工具链 - GCC-11.2.0 - 第一遍

Posted Lucifer三思而后行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux From Scratch(LFS11.0)编译交叉工具链 - GCC-11.2.0 - 第一遍相关的知识,希望对你有一定的参考价值。

GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。

GCC 依赖于 GMP、MPFR 和 MPC 这三个包。 由于宿主发行版未必包含它们,我们将它们和 GCC 一同构建。

将它们都解压到 GCC 源码目录中,并重命名解压出的目录,这样 GCC 构建过程就能自动使用它们:

cd $LFS/sources
tar xf gcc-11.2.0.tar.xz
cd gcc-11.2.0
tar -xf ../mpfr-4.1.0.tar.xz
mv -v mpfr-4.1.0 mpfr
tar -xf ../gmp-6.2.1.tar.xz
mv -v gmp-6.2.1 gmp
tar -xf ../mpc-1.2.1.tar.gz
mv -v mpc-1.2.1 mpc

对于 x86_64 平台,还要设置存放 64 位库的默认目录为 “lib”:

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \\
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

GCC 文档建议在一个专用目录中构建 GCC:

mkdir -v build
cd build

编译并安装 GCC:

time { ../configure                                       \\
    --target=$LFS_TGT                              \\
    --prefix=$LFS/tools                            \\
    --with-glibc-version=2.11                      \\
    --with-sysroot=$LFS                            \\
    --with-newlib                                  \\
    --without-headers                              \\
    --enable-initfini-array                        \\
    --disable-nls                                  \\
    --disable-shared                               \\
    --disable-multilib                             \\
    --disable-decimal-float                        \\
    --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 环境中,就是$LFS/usr/include/limits.h。

然而,在构建 GCC 的时候,$LFS/usr/include/limits.h 还不存在,因此 GCC 安装的内部头文件是一个不完整的、自给自足的文件,不包含系统头文件提供的扩展特性。

这对于构建临时的 libc 已经足够了,但后续工作将需要完整的内部头文件。

使用以下命令创建一个完整版本的内部头文件,该命令与 GCC 构建系统在一般情况下生成该头文件的命令是一致的:

cd ..
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \\
  `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h

安装完成后清理工作:

cd ../..
rm -rf gcc-11.2.0

本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️

以上是关于Linux From Scratch(LFS11.0)编译交叉工具链 - GCC-11.2.0 - 第一遍的主要内容,如果未能解决你的问题,请参考以下文章

Linux From Scratch(LFS11.0)构建 LFS 系统 - 清理系统

Linux From Scratch(LFS11.0)构建 LFS 系统 - GCC-11.2.0

Linux From Scratch(LFS11.0)收尾工作

Linux From Scratch(LFS11.0)收尾工作

Linux From Scratch(LFS11.0)构建 LFS 系统 - Diffutils-3.8

Linux From Scratch(LFS11.0)构建 LFS 系统 - Inetutils-2.1