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

标签 gcc dependencies cross-compiling

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

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

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

  • 为什么要涉及第二阶段?我不能用一些标志来调用第一阶段的编译器,比如 -lc包括libc?

    最佳答案

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

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

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

    关于gcc - 为什么交叉编译器有两阶段编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27457835/

    相关文章:

    python - Python 任务调度器 Luigi 可以检测间接依赖吗?

    java - 如何使模块 x 的第 3 方依赖项与其一起到达依赖于模块 x 的模块 y 的类路径?

    Android- 无法解析 android.arch.persistence.room :runtime:1. 0.0

    shared-libraries - 错误使用-fPIC编译共享库

    c - 如何使用U-Boot将应用加载到板子上

    c++ - C mxe 链接失败 : ld cannot find symbols

    c - gcc 使用 malloc 进行内存对齐

    c - 在 C 中打印字节数组时处理神秘输出

    C 乘法或加法浮点结果 NaN

    c++ - gcc Boost 模板结果为 "defined in discarded section"