对于从源代码构建gcc的人来说,gmp是gcc的依赖项。为什么会这样呢?换句话说,gcc实际上用它做什么?
请参考这个回答,它与此问题类似但不相同。
GMP在编译器(在编译时)内部需要,特别是用于常量折叠。一些语言标准(特别是一些最近的Fortran版本)要求例如1234567891234567*1234567891
以任意精度计算。
即使是C对于常量折叠也需要更大的整数:这是获得表达式的正确结果的唯一方法(可能在某些宏扩展后获得,即使您没有在源代码中显式放置它),例如(123456789087651234*65125412651209128612+187451)%10000000141
或(140000000000041*150000000000061+134500000000139)%250000000000111
。
我忘记了C或C++标准对这种常量表达式的规定。正确计算它们肯定不会错。但是Fortran要求它们被正确计算,因此需要大整数。我的第二个例子仅包含适合64位的质数,但您需要bignum才能正确计算结果...
此外,在交叉编译时,GCC需要比主机整数更精确的精度。考虑从32位到64位机器进行交叉编译,您肯定希望常量折叠计算所有64位!