为什么交叉编译器有两阶段编译?

Mar*_*tin 5 dependencies gcc cross-compiling

我目前尝试了解交叉编译器是如何工作的。我对两阶段编译器编译过程有点困惑。

据我所知,应用以下程序:

  • 为目标架构编译bintutils
  • 编译GCC(第 1 阶段)
  • 使用 GCC编译newlib/eglibc/...
  • 使用libc编译GCC(第 2 阶段)

为什么会有第二阶段?我不能使用一些标志(例如-lc包含libc )来调用第一阶段编译器吗?

Ric*_*ton 0

我不知道为什么 gcc 有如此复杂的构建过程。我的基于 clang/LLVM 的 ELLCC ( http://ellcc.org ) 跨工具链项目构建如下:

  1. 编译编译器(使用 gcc 或网站上提供的 ELLCC 编译器的预构建版本)。
  2. 使用编译器为所有目标构建 C++ 和 C 库。
  3. 为所有目标构建 binutils 和 gdb(对于所有目标:除了汇编器之外,不要创建特定于目标的实用程序。ld、gdb、objdump 等都支持此功能)
  4. (可选)使用新构建的编译器为所有目标交叉构建自身。

顺便说一句,ELLCC 目前支持 Linux 和裸机执行环境的 ARM、Microblaze、Mips、PowerPC 和 x86 目标。