Arm-none-eabi工具链总是与-nostartfiles标志一起使用,以排除默认的crt和每个微控制器的自定义链接器脚本,那么它们的默认目的是什么(在/usr/lib/Arm-none-eabi/下)?他们什么时候使用?
我不知道在任何情况下你会使用默认的未经编辑的链接器脚本,尽管它是一个有用的模板来设置你自己的版本。
默认启动文件包含您可能需要或不需要的初始化例程。
如果你只编译C语言,并且你不使用任何不纯的C库函数,那么你可以使用-nostartfiles,但是如果你使用c++或库函数保留一些状态,那么启动文件可能会执行必要的初始化。您可以阅读C库的源代码以了解详细信息。
如果您手工编写链接器脚本,则确实不需要指定-nostartfiles,因为您可以对链接器脚本中包含和排除的内容进行更细粒度的控制。如果您使用——gc-sections链接器选项来删除所有未引用的内容,那么将startfiles作为链接器输入是无害的。
例如,许多嵌入式目标旨在引导并永远运行,永远不会关闭/finalize/退出。通过使用-nostartfiles,你可以在链接脚本中排除。fini和相关的部分,而不会有丢失所需内容的风险。
最好的方法是编译一个真实的项目,你正在做的和没有这个选项,看看是否有任何不同的map文件或反汇编。