LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2 - 第2遍
Posted Lucifer三思而后行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2 - 第2遍相关的知识,希望对你有一定的参考价值。
GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。
第一次编译 GCC 的时候安装了一些内部系统头文件。
其中的一个 limits.h 会反过来包括对应的系统头文件 limits.h, 在我们的例子中,是 /tools/include/limits.h。
但是,第一次编译 gcc 的时候 /tools/include/limits.h 并不存在,因此 GCC 安装的内部头文件只是部分的自包含文件, 并不包括系统头文件的扩展功能。这足以编译临时 libc,但是这次编译 GCC 要求完整的内部头文件。
首先,切换到 lfs
用户下:
su - lfs
确保环境变量已生效,并且解压软件包
echo $LFS
cd $LFS/sources
tar xf gcc-4.9.2.tar.bz2
cd gcc-4.9.2
使用和正常情况下 GCC 编译系统使用的相同的命令创建一个完整版本的内部头文件:
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \\
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h
再一次更改 GCC 的默认动态链接器的位置,使用安装在 /tools 的那个:
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 一样,它要求 GMP、MPFR 和 MPC 软件包。 解压 tar 包并把它们重名为到所需的文件夹名称:
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
再次创建独立的编译文件夹:
mkdir -v ../gcc-build
cd ../gcc-build
准备编译 GCC:
CC=$LFS_TGT-gcc \\
CXX=$LFS_TGT-g++ \\
AR=$LFS_TGT-ar \\
RANLIB=$LFS_TGT-ranlib \\
../gcc-4.9.2/configure \\
--prefix=/tools \\
--with-local-prefix=/tools \\
--with-native-system-header-dir=/tools/include \\
--enable-languages=c,c++ \\
--disable-libstdcxx-pch \\
--disable-multilib \\
--disable-bootstrap \\
--disable-libgomp
编译软件包:
make
安装软件包:
make install
作为画龙点睛,这里创建一个符号链接:
ln -sv gcc /tools/bin/cc
检查是否安装成功:
echo \'main(){}\' > dummy.c
cc dummy.c
readelf -l a.out | grep \': /tools\'
注意:如果上述执行返回结果是:[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
,则代表正常。
安装完成后清理工作:
rm -v dummy.c a.out
cd ..
rm -rf gcc-build
rm -rf gcc-4.9.2
❤️ 技术交流可以 关注公众号:Lucifer三思而后行 ❤️
以上是关于LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2 - 第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