从gcc4.7.x中删除crt0.o背后的理由是什么?

时间:2013-06-07 10:15:54

标签: gcc arm ld yagarto

我正在尝试升级到yagarto4.7.2(还有另一个GNU ARM工具链,对于那些想知道的人),这是gcc和binutils,移植到Windows。但是,尝试编译一个简单的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

现在,在这个forum中,很明显这是启动初始化库,它在gcc4.6.x之后被删除了。提出了两种解决方案:

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

对于生产代码来说,两者看起来都很脏并且不可接受。那么有没有人知道 为什么删除这个库以及它现在的等价物是什么?

1 个答案:

答案 0 :(得分:3)

crt0.o派生自crt0.s,由OS提供。在裸机设置的情况下,该文件必须由实现提供。它包含启动和退出代码,例如将.bss归零。