gcc4.7.x为什么要移除crt0.o文件?

7

我正在尝试升级到yagarto4.7.2(对于那些想知道的人来说,这是一个为Windows移植的gcc和binutils工具链)。然而,尝试编译一个简单的Hello World程序会产生以下错误:

c:/yagarto-20121222/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi
/bin/ld.exe: cannot find crt0.o: No such file or directory
collect2.exe: error: ld returned 1 exit status

现在,在这个论坛中,明确指出这是启动初始化库,在gcc4.6.x之后被删除。提出了两个解决方案:

  • 使用-nostartfiles进行编译。
  • 将crt0.o从4.6.x复制到4.7.x文件夹中。

这两种方法看起来都很不可取和不专业。那么,有人知道为什么删除了这个库以及它的现在的替代品是什么吗?


1
关于 yargarto 的一些关键事实:这是一个基于 mingw 和预构建的 newlib 编译器。参见:SO gcc newlib questions。可以使用 crosstool-ng 构建此类型的编译器,但由于它是 加拿大交叉编译,所以非常困难。 - artless noise
1
https://dev59.com/VmMl5IYBdhLWcg3wa2fW - 0x90
1个回答

3

crt0.o是从crt0.s派生而来,由操作系统提供。在裸机设置的情况下,该文件必须由实现提供。它包含启动和退出代码,例如用于清零.bss。


1
不是那么愚蠢——它在一个论坛上引发了讨论,你提供了一个链接。SO也作为知识库运作,你应该自由地接受自己的答案。 - Brett Hale
2
这些函数的文档:Newlib syscalls,包括最小实现。 - artless noise
你从哪个操作系统获取了crt0.s呢? - harper
@harper,请参考artless noise上面的评论以了解如何编写您自己的代码。 - Vorac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接