在 C 中没有主程序。当然,C 程序员从 int main(int argc char *argv[]) 开始,但这只是因为有一个例程告诉编译器/IDE 首先运行名为 main 的函数。
不过,我似乎在 MinGW 中找不到这个例程。它在哪里定义?我只是搜索,因为我想更改它(仅作为测试)并尝试一下。有人可以将我链接到 MinGW 文件夹中的正确文件吗?
在 C 中没有主程序。当然,C 程序员从 int main(int argc char *argv[]) 开始,但这只是因为有一个例程告诉编译器/IDE 首先运行名为 main 的函数。
不过,我似乎在 MinGW 中找不到这个例程。它在哪里定义?我只是搜索,因为我想更改它(仅作为测试)并尝试一下。有人可以将我链接到 MinGW 文件夹中的正确文件吗?
链接器将在ld
链接 PE 文件时寻找几个符号之一的匹配项,以用作入口点:
entry point subsystem
--------------------- --------------
NtProcessStartup native
WinMainCRTStartup Windows GUI
mainCRTStartup Windows CUI (console)
__PosixProcessStartup POSIX CUI
WinMainCRTStartup WinCE GUI
mainCRTStartup Xbox
mainCRTStartup other
DllMainCRTStartup@12 (or possibly DllMainCRTStartup) for DLLs
MinGW 将有一个自动链接的目标文件,该文件具有实际的 PE 入口点。-v
- 您可以使用 gcc 的选项查看正在自动链接的目标文件。
在使用 MinGW 4.6.1 构建控制台子系统“hello world”程序的快速测试中,包含入口点的目标文件是crt2.o
,并且它有一个符号mainCRTStartup
,链接器将其作为入口点。
包含入口点代码的源文件是crtexe.c
(或crtdll.c
)。
--entry
您可以使用链接器的选项覆盖入口点(Wl,--entry=whatever
在 gcc 命令行上使用时)。