何时使用gcc标志-nostartfiles?

15

我似乎无法弄清楚标志-nostartfiles的目的。它阻止立即调用main(),通常您还会指定程序入口点。但是,为什么我要这样做?除了需要自己启动所有内容的内核外,是否有非操作系统原因指定不同的程序入口点?


1
我编写了一个内核,因为一切都取决于我开始。- 你自己回答了这个问题。 - yugr
好的,是的。我的意思是,除了内核编写(参见问题的最后一部分)之外,还有其他原因吗?如果没有,那么我想我比我想象中更理解它了 :-P - Michael Stachowsky
1
微控制器,使用编译器作为交叉编译器,并防止使用库,因为没有操作系统来支持它们。 - old_timer
2个回答

17

当您不想链接任何标准库(如libc和libgcc)并且不希望运行标准初始化操作,例如调用C ++构造函数时,您可以使用-nostartfiles(以及-nostdlib)。典型的用例是编写系统软件,例如内核或固件。


4
另一个用例是当您正在构建启动文件本身时。 :) - Brooks Moses

1
我认为使用-nostartfiles命令行参数时,将不会将参数传递给main()函数,可执行文件中也无法使用环境变量等其他功能。Docker在一个简单的容器内运行单个二进制文件的示例中使用了-nostartfiles,即使容器像单个二进制文件一样运行:https://docs.docker.com/develop/develop-images/baseimages/,这是另一个用例。
稍微相关的是gcc/mingw中“startup files”的源代码,如果不使用-nostartfiles选项,它将列出链接到代码中的函数列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接