2

在 C 中没有主程序。当然,C 程序员从 int main(int argc char *argv[]) 开始,但这只是因为有一个例程告诉编译器/IDE 首先运行名为 main 的函数。

不过,我似乎在 MinGW 中找不到这个例程。它在哪里定义?我只是搜索,因为我想更改它(仅作为测试)并尝试一下。有人可以将我链接到 MinGW 文件夹中的正确文件吗?

4

1 回答 1

1

链接器将在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 命令行上使用时)。

于 2013-05-09T15:34:34.667 回答