MinGW主程序

时间:2013-05-09 13:07:09

标签: function compiler-construction mingw startup main

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

但是,我似乎无法在MinGW中找到这个例行程序。它在哪里定义?我只是搜索,因为我想改变它(仅作为测试)并稍微玩一下。有人可以将我链接到MinGW文件夹中的正确文件吗?

1 个答案:

答案 0 :(得分: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入口点。 - 您可以使用gcc的-v选项查看自动链接的对象文件。

在使用MinGW 4.6.1构建控制台子系统“hello world”程序的快速测试中,包含入口点的目标文件为crt2.o,并且其符号mainCRTStartup由链接器作为入口点。

包含入口点代码的源文件是crtexe.c(或crtdll.c)。

您可以使用链接的--entry选项覆盖入口点(在gcc命令行中使用时为Wl,--entry=whatever)。