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

Gcc 为什么交叉编译器有两个阶段的编译?,gcc,dependencies,cross-compiling,Gcc,Dependencies,Cross Compiling,我目前试图了解交叉编译器是如何工作的。我对两阶段编译器编译过程有点困惑 据我所知,以下程序适用: 为目标体系结构编译bintutils 编译GCC(第1阶段) 编译newlib/eglibc/。。。与海湾合作委员会 使用libc编译GCC(第2阶段) 为什么会涉及第二阶段?难道我不能用一些标志(如-lc)调用第一阶段编译器来包含libc吗?我不知道gcc为什么有这么复杂的构建过程。我的基于clang/LLVM的ELLCC()跨工具链项目构建如下: 编译编译器(使用gcc或网站上提供的ELLC

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

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

  • 为目标体系结构编译bintutils
  • 编译GCC(第1阶段)
  • 编译newlib/eglibc/。。。与海湾合作委员会
  • 使用libc编译GCC(第2阶段)

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

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

  • 编译编译器(使用gcc或网站上提供的ELLCC编译器的预编译版本)
  • 使用编译器为所有目标构建C++和C库。
  • 为所有目标构建binutils和gdb(对于所有目标:除了Assembler.ld、gdb、objdump等,不要生成特定于目标的实用程序。所有这些都支持这一点)
  • (可选)使用新构建的编译器为所有目标交叉构建自身

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

    gcc附带的一些库需要libc。与LFS相关:Richard:我在Windows上构建简单的“hello world”程序时遇到了问题。我得到“ecc.exe:error:cannotexecutecommand:cannotexecuteprogram'C:\ellcc\ellcc\bin/ecc ld.exe'Unknown error”Raman:显然这与文件的卸载方式有关:啊,是的。这就解决了问题。我注意到它在Windows上生成的是一个静态二进制文件。是否有动态链接到各种运行时的东西,如CRT等?对不起,目前我只制作静态库。最后我想补充一点,所以请支持我。C库musl确实支持动态,我只是还没来得及用这种方式构建它。理查德:另一个问题。所以,当我在Windows上使用此编译器构建时,您链接到哪个C库?