为什么构建交叉编译器比构建常规编译器更难?

dsi*_*cha 5 compiler-construction cross-platform cross-compiling

我读过的所有内容似乎都暗示构建交叉编译器比构建针对其运行的平台的编译器要困难得多.这是真的?如果是这样,为什么?似乎为任意平台生成汇编代码和系统调用不应该比为编译器运行的平台生成这样的代码和系统调用更难,但也许我只是天真.

Ada*_*vis 2

“构建交叉编译器比构建针对其运行平台的编译器要困难得多。”

该问题的存在是由于库的构建和访问方式造成的。

在正常情况下,所有库都位于特定位置,并由该系统上的所有应用程序使用。所有构建机制和软件都假定库的位置。make 文件、编译器等依赖于它们可以到达特定位置并找到所需内容的想法。

然而,在交叉编译的情况下,交叉编译器、make 文件等不能做出这些假设 - 如果它们这样做,它们将链接错误的库。

所以这实际上归结于这样一个事实:开发人员很早就做出了某些假设,而我们却坚持这一点。

当您构建根文件系统时,事情会变得更加困难,因为 UNIX 只知道一个根文件系统。当您构建另一个根文件系统时,您必须创建一个特殊的环境,允许您在不影响真正的根文件系统的情况下操作它。

-亚当