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入口点的自动链接的对象文件。-你可以通过使用gcc的-v
选项看到哪些目标文件被自动链接。
在使用MinGW 4.6.1构建控制台子系统"hello world"程序的快速测试中,包含入口点的目标文件是crt2.o
,并且它有一个符号mainCRTStartup
,该符号被链接器拾取作为入口点。
包含入口点代码的源文件是crtexe.c
(或crtdll.c
)。
您可以使用--entry
选项覆盖链接器的入口点(在gcc命令行中使用Wl,--entry=whatever
)。