OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

5.5.1. 安装Cross GCC

图片

GCC 现在需要 GMP、MPFR 和 MPC 包。 由于这些包可能不包含在您的主机发行版中,它们将使用 GCC 构建。 将每个包解压到 GCC 源目录并重命名生成的目录,以便 GCC 构建过程将自动使用它们:


备注

关于这一章经常有误解。 这些过程与前面解释过的每一章相同(包构建说明)。 首先从源目录中提取 gcc tarball,然后切换到创建的目录。 只有这样,您才能继续执行以下说明。

备注

关于这一章经常有误解。 这些过程与前面解释过的每一章相同(包构建说明)。 首先从源目录中提取 gcc tarball,然后切换到创建的目录。 只有这样,您才能继续执行以下说明。


焦油-xf ../mpfr-4.0.2.tar.xz mv-v mpfr-4.0.2 mpfr

焦油-xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

焦油-xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

焦油-xf ../mpfr-4.0.2.tar.xz mv-v mpfr-4.0.2 mpfr

焦油-xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

焦油-xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

图片

在 gcc/config/{linux,i386/linux{,64}}.h

在 gcc/config/{linux,i386/linux{,64}}.h

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $file.orig > $file

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $file.orig > $file

以下命令将更改 GCC 的默认动态链接器的位置以使用安装在 /工具. 它还去除 / usr / include 来自 GCC 的包含搜索路径。 问题:


为文件做

cp -uv sed -e

-e

为文件做

cp -uv sed -e

-e


回声'

#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

完成

回声'

#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

完成

如果上面的内容似乎难以理解,让我们将其分解一下。 首先我们复制文件 gcc/配置/linux.h, gcc/配置/i386/linux.hgcc/配置/i368/linux64.h 到同名但添加了“.orig”后缀的文件。 然后第一个 sed 表达式将“/tools”添加到“/lib/ld”、“/lib64/ld”或“/lib32/ld”的每个实例之前,而第二个则替换“/usr”的硬编码实例。 接下来,我们添加定义语句,将默认起始文件前缀更改为文件末尾。 请注意,“/tools/lib/”中的尾随“/”是必需的。 最后,我们使用 触摸 更新复制文件的时间戳。 配合使用时 中央处理器,这可以防止在命令无意中运行两次时对原始文件进行意外更改。


最后,在 x86_64 主机上,将 64 位库的默认目录名称设置为“lib”:


案例 $(uname -m) 在 x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

ESAC

案例 $(uname -m) 在 x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

ESAC

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


mkdir -v 构建 cd 构建

mkdir -v 构建 cd 构建

准备 GCC 进行编译:


../配置 \

--目标=$LFS_TGT\

--prefix=/工具\

--with-glibc-version=2.11 \

--with-sysroot=$LFS\

--with-newlib \

--没有标题\

--with-local-prefix=/工具\

--with-native-system-header-dir=/工具/包括\

--禁用-nls \

--禁用共享\

--禁用多库\

--禁用十进制浮点\

--禁用线程\

--禁用-libatomic \

--禁用-libgomp \

--禁用-libquadmath \

--禁用-libssp \

--禁用-libvtv \

--禁用-libstdcxx \

--启用语言=c,c++

../配置 \

--目标=$LFS_TGT\

--prefix=/工具\

--with-glibc-version=2.11 \

--with-sysroot=$LFS\

--with-newlib \

--没有标题\

--with-local-prefix=/工具\

--with-native-system-header-dir=/工具/包括\

--禁用-nls \

--禁用共享\

--禁用多库\

--禁用十进制浮点\

--禁用线程\

--禁用-libatomic \

--禁用-libgomp \

--禁用-libquadmath \

--禁用-libssp \

--禁用-libvtv \

--禁用-libstdcxx \

--启用语言=c,c++

配置选项的含义:


--with-newlib

由于尚无可用的 C 库,这可确保在构建 libgcc 时定义了 prevent_libc 常量。 这可以防止编译任何需要 libc 支持的代码。

--无标题

创建完整的交叉编译器时,GCC 需要与目标系统兼容的标准头文件。 出于我们的目的,不需要这些标题。 此开关可防止 GCC 查找它们。

--with-local-prefix=/工具

本地前缀是 GCC 将在系统中搜索本地安装的包含文件的位置。 默认是 /usr/本地. 将此设置为 /工具 有助于保持主机位置 在/ usr /本地 离开这个 GCC 的搜索路径。


--with-native-system-header-dir=/工具/包括

默认情况下 GCC 搜索 / usr / include 对于系统标题。 结合 sysroot 开关,这通常会转化为 $LFS/usr/包括. 但是,将在接下来的两个部分中安装的标头将转到 $LFS/工具/包括. 这个开关确保 gcc 会正确地找到它们。 在 GCC 的第二遍中,这个相同的开关将确保找不到来自主机系统的头文件。

--禁用共享

此开关强制 GCC 静态链接其内部库。 我们这样做是为了避免主机系统可能出现的问题。

--disable-decimal-float、--disable-threads、--disable-libatomic、--disable-libgomp、--disable-libquadmath、--disable-libssp、--disable-libvtv、--disable- libstdcxx

这些开关禁用对十进制浮点扩展、线程、libatomic、libgomp、

libquadmath、libssp、libvtv 和 C++ 标准库。 这些功能在构建交叉编译器时将无法编译,并且对于交叉编译临时 libc 的任务不是必需的。

--禁用-multilib

在 x86_64 上,LFS 尚不支持多库配置。 此开关对 x86 无害。

--启用语言=c,c++

此选项可确保仅构建 C 和 C++ 编译器。 这些是现在唯一需要的语言。

通过运行编译 GCC:


使

使

编译现已完成。 此时,测试套件通常会运行,但如前所述,测试套件框架尚未到位。 此时运行测试的好处很小,因为第一遍的程序很快就会被替换。

安装软件包:


使安装

使安装

OnWorks 的顶级操作系统云计算: