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

时间:2014-12-13 10:28:56

标签: gcc dependencies cross-compiling

我目前试图了解交叉编译器的工作原理。我对两阶段编译器编译过程感到有点困惑。

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

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

为什么会涉及第二阶段?我不能用一些标志-lc调用第一阶段编译器来包含 libc 吗?

1 个答案:

答案 0 :(得分:0)

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

  1. 编译编译器(使用gcc或网站提供的预先构建的ELLCC编译器版本。)。
  2. 使用编译器为所有目标构建C ++和C库。
  3. 为所有目标构建binutils和gdb(对于所有目标:除了汇编程序之外,不要创建目标特定的实用程序.ld,gdb,objdump等都支持这个)
  4. (可选)使用新构建的编译器为所有目标交叉构建自己。
  5. BTW,ELLCC目前支持ARM,Microblaze,Mips,PowerPC和x86目标,适用于Linux和裸机执行环境。