C运行时
💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
C运行时的启动对象包括crt0.o、crt1.o、crti.o和crtn.o,其中crt1.o是程序入口,负责初始化并调用main函数。不同的变体如Scrt1.o和gcrt1.o用于生成不同类型的可执行文件,链接顺序为crt1.o、crti.o等,以确保正确的初始化和清理。
🎯
关键要点
- C运行时的启动对象包括crt0.o、crt1.o、crti.o和crtn.o。
- crt1.o是程序入口,负责初始化并调用main函数。
- 不同的变体如Scrt1.o和gcrt1.o用于生成不同类型的可执行文件。
- 链接顺序为crt1.o、crti.o等,以确保正确的初始化和清理。
- crt0.o历史上是C运行时零,现代工具链使用crt1.o作为主要启动对象。
- crt1.o提供_start符号,crti.o负责初始化,crtn.o负责终止。
- crtbegin和crtend用于查找构造函数和析构函数的起始位置。
- 启动对象在链接时被连接,而不是通过函数调用。
- 典型的链接顺序包括crt1.o、crti.o、用户对象和C库等。
- 启动对象的作用包括设置内存、准备argc和argv、调用main函数以及清理工作。
❓
延伸问答
C运行时的启动对象有哪些?
C运行时的启动对象包括crt0.o、crt1.o、crti.o和crtn.o。
crt1.o在C运行时中有什么作用?
crt1.o是程序入口,负责初始化并调用main函数。
不同的crt1.o变体有什么用途?
Scrt1.o用于生成位置无关的可执行文件,gcrt1.o用于生成带有性能分析信息的可执行文件。
C运行时的链接顺序是怎样的?
典型的链接顺序为crt1.o、crti.o、用户对象、C库和crtend.o、crtn.o。
启动对象在链接时是如何处理的?
启动对象在链接时被连接,而不是通过函数调用。
C运行时如何处理内存和参数准备?
启动对象负责设置内存、准备argc和argv,并调用main函数。
➡️