Gcc 为什么必须为特定目标配置gnu binutils。什么';下面发生了什么

Gcc 为什么必须为特定目标配置gnu binutils。什么';下面发生了什么,gcc,binutils,Gcc,Binutils,我正在为arm Cortex-A5 cpu创建自己的自定义gcc工具链,我正试图尽可能深入地研究每一步。我故意避免使用crosstool ng或其他工具来辅助,以便更好地理解创建工具链过程中发生的事情 但有一件事让我很困惑。在配置和构建binutils期间,我需要指定一个目标(--target)。这个目标可以是经典的主机元组(例如:arm-none-linux-gnuabi),也可以是特定的类型,比如i686-elf 为什么需要这个目标?它对由binutils生成的“as”和“ld”程序有什么特

我正在为arm Cortex-A5 cpu创建自己的自定义gcc工具链,我正试图尽可能深入地研究每一步。我故意避免使用crosstool ng或其他工具来辅助,以便更好地理解创建工具链过程中发生的事情

但有一件事让我很困惑。在配置和构建binutils期间,我需要指定一个目标(--target)。这个目标可以是经典的主机元组(例如:arm-none-linux-gnuabi),也可以是特定的类型,比如i686-elf

为什么需要这个目标?它对由binutils生成的“as”和“ld”程序有什么特别的作用

例如,如果我使用arm none linux gnueabi构建它,那么生成的“as”程序似乎支持sun下的所有arm指令集(armv4t、armv5、e.t.c.)

这仅仅是为了在生成的可执行文件中节省空间吗?还是发生了更多的事情

例如,如果我为特定的指令集配置了binutils,我就会得到它。为我构建一个理解armv4t指令的汇编程序


通过查看binutils和gas的源代码,主机元组似乎正在选择位于gas/config/tc*、gas/config/te*中的一些头文件。同样,这似乎是武断的,因为它是系统的广泛类别

很抱歉这么漫无边际:)我想我的问题可以表述为:为什么binutils不是一个集所有功能于一身的软件包

为什么需要这个目标

因为有(许多)不同的目标体系结构。ARM汇编程序/代码不同于PowerPC,不同于x86等。原则上,可以为所有目标设计一个工具,但这不是当时采用的方法

重点是速度/性能。可执行文件与今天的“标准”一样小,但将所有>40个体系结构和所有工具(如
as
ld
nm
等)结合在一起会相当笨重

此外,现代主机不仅功能强大,而且还适用于编译/汇编程序,有时有几行(预处理)C++编译。这意味着总体构建时间在编译方向上的变化要比过去大得多

每个选项通常只能切换/选择不同的核心系列