关于搭建GCC必要步骤的问题

Questions about necessary steps for building GCC

我有几个关于构建 GCC 的构建过程的问题,我希望有人能向我解释。

  1. 为什么需要取消设置C_INLCUDE_PATH CPLUS_INCLUDE_PATH LD_LIBRARY_PATH LIBRARY_PATH
  2. 为什么 GCC 需要 MPFRMPCGMP 来构建?如果旧版本(与download_prerequisites一起下载)然后安装新版本,编译后的程序将使用哪个?

Why does GCC require MPFR, MPC, and GMP to build?

这部分我可以回答。 MPFR 和 MPC 是在编译时应用浮点运算所必需的。理论上 MPFR 可用于解析源代码中的十进制常量(GCC 开发人员多次表示,由于他们现在依赖 MPFR,因此他们不妨使用它,但据我所知,GCC 的十进制到浮点数转换仍然依赖于他们自己的代码 real.c)。使用 MPFR 还允许在没有浮点(或具有与目标体系结构不同特征的浮点)的机器上托管交叉编译器。

GMP 只是其他两个的依赖项。

以前不是这样的,对MPFR的依赖是最近才发生的变化(比如几年)。


And if old versions (as downloaded with the download_prerequisites) and then newer versions are installed later, which will be used by a compiled program?

GMP、MPFR、MPC 库仅在编译时使用。任何已经编译过的程序都是用编译器当时使用的这些库的版本编译的。如果您之后更新库,从编译程序的角度来看,它不会改变任何东西。


趁着我在这里,我想我也可以解释另一件事:

Why is it necessary to unset C_INLCUDE_PATH CPLUS_INCLUDE_PATH LD_LIBRARY_PATH LIBRARY_PATH

因为构建过程将这些变量用于自己的目的,如果你设置它们,它会把它搞砸。