【发布时间】:2011-02-12 04:36:38
【问题描述】:
最近我一直在尝试调试一些低级工作,但我找不到编译器的crt0.S (avr-gcc),但我确实找到了crt1.S(与对应的@987654324 相同) @ 文件)。
这两个文件有什么区别? crt1 是完全不同的东西还是什么?它们似乎都与“引导”有关(设置stack frame 等),但为什么要区分呢?
【问题讨论】:
最近我一直在尝试调试一些低级工作,但我找不到编译器的crt0.S (avr-gcc),但我确实找到了crt1.S(与对应的@987654324 相同) @ 文件)。
这两个文件有什么区别? crt1 是完全不同的东西还是什么?它们似乎都与“引导”有关(设置stack frame 等),但为什么要区分呢?
【问题讨论】:
crt0/crt1 都做同样的事情,基本上都是在调用 main() 之前做需要做的事情(比如初始化堆栈,设置 irqs 等)。您应该链接其中之一,但不能同时链接两者。它们不是真正的库,而是真正的内联汇编代码。
据我了解,crt 有两种“风味”
【讨论】:
crtbeginT.o 和 crtend.o 是构造函数和析构函数。