MinGW Main routine



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)。

相关内容

  • 没有找到相关文章

最新更新