gpt4 book ai didi

startup - Crt.s文件有什么用?

转载 作者:行者123 更新时间:2023-12-05 05:15:18 26 4
gpt4 key购买 nike

我知道它们用于调用 main(),但如果那是唯一目的,那么拥有不同的 crt 文件有什么意义。为什么不使用默认的而不是创建自己的?

最佳答案

CRT 文件是 C 运行时文件。您最有可能遇到的是 crt0.S,这是大多数系统为作为给定进程的一部分执行的第一个代码提供的名称。这本质上是在系统 ABI(即 Linux 加载器提供的)和语言 ABI(即用户可以更改的代码)之间进行转换的填充层。因此,实现耦合到语言运行时(即 C 库)和系统运行时(即内核)。这里的结果是每个内核/libc 对往往有一个 crt0.S

如果那是唯一需要编写 crt0.S 的情况,那么一切都会好起来的,您可能从未听说过它——就像您可能从未听说过一样工具链的任何其他深奥的部分。当您考虑嵌入式系统时,所有这些开始成为问题的部分——具体来说,嵌入式系统上的软件堆栈往往有点特别。结果是在系统运行时(这可能只是处理器在复位时所做的任何事情)和语言运行时(这是 C 的一些受限子集)之间很少有标准接口(interface)。由于 crt0.S 是它们之间的垫片,因此系统往往会有不同的垫片。

举一个具体的例子:在大多数 POSIX ABI 中,加载程序负责在将控制权转移给 ELF 之前设置 ELF 中的所有段。在嵌入式系统中,情况并非如此,因此 CRT 必须以一种方式编写,以便它可以仅使用已设置的段的子集来初始化自身。因此,POSIX crt0.S 不必初始化数据段或堆栈指针,而嵌入式 crt0.S 通常需要这样做。

另一方面,POSIX C 运行时倾向于支持许多复杂的功能,例如线程本地存储、动态链接、错误处理和信号。嵌入式运行时往往只支持这些功能的有限子集(通常是出于空间原因),这使得 POSIX crt0.S 无法使用。

关于startup - Crt.s文件有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51684188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com