Linux 澄清“/配置”;选项“--构建”“--主机&x201D;和“--目标”;

Linux 澄清“/配置”;选项“--构建”“--主机&x201D;和“--目标”;,linux,gcc,configure,Linux,Gcc,Configure,脚本./configure接受选项--build、--host和--target。在阅读了一些帖子和文章之后,我仍然对这些选项到底是什么以及它们包含哪些软件感到困惑 以下是GNU网站上关于三个术语的片段: 构建知道三个系统名称:构建的机器(build)、构建的机器(host)和GCC将为其生成代码的机器(target)。在配置GCC时,可以使用--build=、--host=、和--target=来指定它们 应该避免在不指定生成的情况下指定主机,因为configure可能(并且曾经)假设您指定的

脚本./configure接受选项--build、--host和--target。在阅读了一些帖子和文章之后,我仍然对这些选项到底是什么以及它们包含哪些软件感到困惑

以下是GNU网站上关于三个术语的片段:

构建知道三个系统名称:构建的机器(build)、构建的机器(host)和GCC将为其生成代码的机器(target)。在配置GCC时,可以使用--build=、--host=、和--target=来指定它们

应该避免在不指定生成的情况下指定主机,因为configure可能(并且曾经)假设您指定的主机也是生成,这可能不是真的

当使用“建筑在”或“建筑用于”这两个术语时,它们究竟指的是什么?从我读到的帖子来看,“building on”似乎是指用于编译调试器或编译器的系统,而主机是运行调试器或编译器的系统

我在年遇到的一个例子让我对“构建”到底是什么感到困惑:

  • build:您将在其上执行所有编译的powerpc构建机器
  • 主机:用于现场调试这些设备的x86笔记本电脑
  • 目标:几个嵌入式设备,带有MIPS处理器,您的代码将在这些设备上运行
由于PowerPC正在为MIPS设备进行编译,这是否意味着它既是一个主机,也是一个构建?这是否也意味着运行调试软件的系统也被归类为主机系统

根据一位用户的评论,提到:

  • build=我在哪里编译编译器
  • host=编译器将运行的位置
  • target=编译器将生成什么代码
那么这是否意味着运行编译器、链接器和调试的系统可以归类为“主机”?那么,“构建”软件包括什么呢

下面是GNU网站上的另一个片段:

如果构建、主机和目标都相同,则称为本机。如果构建和主机相同,但目标不同,则称为交叉。如果build、host和target都不同,则称为canadian(由于涉及加拿大政党和当时从事build工作的人员的背景的模糊原因)。如果主机和目标相同,但构建不同,则使用交叉编译器为不同的系统构建本机。有些人将其称为host-x-host、交叉本机或交叉构建本机。如果构建和目标相同,但主机不同,则使用交叉编译器来构建交叉编译器,该编译器为正在构建的机器生成代码。这是罕见的,因此没有通用的描述方式。有人提议称之为交叉攻击

我的理解如下:

  • 本机-我运行并测试我的程序的x86_64机器是本机。编译器/链接器(gcc)是在我安装操作系统时编译和安装的,我使用gcc编译我在同一台机器上本机运行的代码
  • 交叉-如果我使用同一台x86_64机器为MIPS设备编译代码,那么现在就是交叉。x86_64机器是主机/构建,MIPS设备是目标
  • 加拿大-发布了新版本的GCC,我决定使用另一台机器(PowerPC2)编译和测试新的编译器。将来编译器的任何编译都将在这里完成,一旦测试成功,gcc将部署到我的x86_64上。因此,PowerPC2现在是构建,X86_64系统是主机,MIPS设备是目标
  • 交叉编译器-我们将保持构建系统为PowerPC2,但现在我在同一台x86_64主机上编译和运行代码
  • 最后一个设置非常奇怪,它确实指出“当构建和目标相同,但主机不同时,没有通用的方法来描述”。你为什么要这样建立一个系统

使用“普通”软件并没有那么复杂:您有一个构建系统(编译软件的地方)和一个主机系统(运行软件的地方)。通常这两者是相同的(您在系统上为您的系统生成软件);但有时情况并非如此,通常情况下,如果主机系统不适合编译软件,比如嵌入式设备,或者当它(尚未)可用时。当软件在一个系统(类型)上编译,但将在另一个系统(类型)上运行时,这种设置称为交叉编译

如果您编译编译器时使用了第三个系统,因为您构建的编译器可能是交叉编译器。您正在构建的编译器将为其生成代码的系统称为目标系统。构建和宿主系统通常是相同的——新编译器将在构建它的机器上运行,这显然非常适合编译软件——但有时并非如此;在这种情况下,您正在构建一个编译器(build),它将在另一个系统(主机)上运行,并为另一个系统(目标)生成代码

描述了一个类似的场景,但是针对一个被分成两部分的调试器。一部分服务器运行在被调试的设备上,另一部分gdb客户端运行在连接到嵌入式设备的x86笔记本电脑上

现在,调试器类似于反编译器,类似于编译器,它搜索特定体系结构的机器代码。与编译器一样,并非调试器的所有部分都需要在正在调试的机器上运行;我们可以有一个“交叉调试器”,它有一个主机(它运行的地方)和一个目标(它理解的体系结构)。这就是这里的情况。有