crt0.o和crt1.o - 有什么区别?

时间:2010-04-25 21:13:27

标签: c gcc linker crt avr-gcc

最近我一直在尝试调试一些低级别的工作而我找不到编译器的crt0.Savr-gcc),但我找到了crt1.S(和与相应的.o文件相同。

这两个文件有什么区别? crt1是完全不同的东西还是什么?它们似乎都与'bootstrapping'(设置stack frame等)有关,但为什么区别呢?

1 个答案:

答案 0 :(得分:34)

crt0 / crt1都做同样的事情,基本上在调用main()之前做了所需的事情(比如初始化堆栈,设置irqs等)。你应该链接一个或另一个但不是两个。它们不是真正的库,而是真正的内联汇编代码。

据我了解,crt有两种“味道”

  • crt1 用于支持构造函数和析构函数的系统(在main和exit之前和之后调用的函数)。在这种情况下,main被视为普通函数调用。
  • crt0 用于不支持构造函数/析构函数的系统。