LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2

Posted Lucifer三思而后行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2相关的知识,希望对你有一定的参考价值。

GCC 软件包是 GNU 编译器集合的一部分,其中包括 C 和 C++ 的编译器。

现在 GCC 需要 GMP、 MPFR 和 MPC 软件包。

在主机发行版中可能并不包括这些软件包,它们将和 GCC 一起编译。

解压每个软件包到 GCC 源文件夹并重命名解压后的文件夹,以便 GCC 编译过程中能自动使用这些软件!

首先,切换到 lfs 用户下:

su - lfs

确保环境变量已生效,并且解压软件包

echo $LFS
cd $LFS/sources
tar xf gcc-4.9.2.tar.bz2
cd gcc-4.9.2
tar -xf ../mpfr-3.1.2.tar.xz
mv -v mpfr-3.1.2 mpfr
tar -xf ../gmp-6.0.0a.tar.xz
mv -v gmp-6.0.0 gmp
tar -xf ../mpc-1.0.2.tar.gz
mv -v mpc-1.0.2 mpc

下面的指令将会修改 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

GCC 不能正确检测栈保护,这会导致编译 Glibc-2.21 时出现问题,用下面的命令修复这个问题:

sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure

GCC 手册建议在源文件夹之外一个专门的编译文件夹中编译 GCC:

mkdir -v ../gcc-build
cd ../gcc-build

准备编译 GCC:

../gcc-4.9.2/configure                             \\
    --target=$LFS_TGT                              \\
    --prefix=/tools                                \\
    --with-sysroot=$LFS                            \\
    --with-newlib                                  \\
    --without-headers                              \\
    --with-local-prefix=/tools                     \\
    --with-native-system-header-dir=/tools/include \\
    --disable-nls                                  \\
    --disable-shared                               \\
    --disable-multilib                             \\
    --disable-decimal-float                        \\
    --disable-threads                              \\
    --disable-libatomic                            \\
    --disable-libgomp                              \\
    --disable-libitm                               \\
    --disable-libquadmath                          \\
    --disable-libsanitizer                         \\
    --disable-libssp                               \\
    --disable-libvtv                               \\
    --disable-libcilkrts                           \\
    --disable-libstdc++-v3                         \\
    --enable-languages=c,c++

运行命令编译 GCC:

make

安装软件包:

make install
ln -vs gcc /tools/bin/cc

安装完成后清理工作:

cd ..
rm -rf gcc-build
rm -rf gcc-4.9.2

本次分享到此结束啦~

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

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

以上是关于LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2的主要内容,如果未能解决你的问题,请参考以下文章

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - 进入 Chroot 环境

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Less-458

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Diffutils-3.3

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Kmod-19

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Libpipeline-1.4.0

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - Systemd-219