Freestanding C与交叉编译器的生成原理分析(2)

(1)编译生成Freestanding的交叉编译器;
这个交叉编译器完全可以用来编译裸机C程序,编译OS,编译BootLoader,对于嵌入式底层开发者来说,这样一个编译器就足够了,完全可以到此为止。

然而对于一个在OS环境下的应用开发者来说,就需要一个功能更完整的编译器,以及完整的标准C库,这就需要进入步骤(2)。

(2)用刚生成的交叉编译器编译生成标准C库;
Freestanding编译器可以用来编译标准C库,这个是很重要的。

此时虽然编译器和C库都有了,却存在两个缺陷:

编译器可执行文件本身并不知道对应的C库的路径,所以编译程序时就需要额外的命令行参数来提供这些信息。

编译器不能提供Hosted类型C程序初始化环境,因为Hosted环境的建立需要标准C库的支持,而Freestanding编译器在生成时还没有可用的标准C库。这就是一个“鸡生蛋蛋生鸡”的问题了。

为了解决上述问题,需要额外的一个步骤:
(3)重新编译生成Hosted的交叉编译器。
这次编译时,可以有(2)生成的标准C库的支持了,所以可以产生出一个完整的Hosted交叉编译器了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b1c44f0584096c789d010c848a9d4567.html