2013-08-23 32 views
0

MinGW的使用此代碼爲開端,每一個程序Unix的替代方式MinGW的運行時代碼

static void __attribute__((noreturn)) __mingw_CRTStartup (void)  
{ 
    int nRet; 
    SetUnhandledExceptionFilter (_gnu_exception_handler); 
    _fpreset(); 
    _mingw32_init_mainargs(); 
    _mingw32_init_fmode(); 
    _pei386_runtime_relocator(); 
    asm __volatile__ ("andl $-16, %%esp" : : : "%esp"); 
    nRet = main (_argc, _argv, environ); 
    _cexit(); 
    ExitProcess (nRet); 
} 

什麼是替代用於Linux的終止所有線程和處理返回值行ExitProcess(nRet);?我在哪裏可以找到Linux/OS X gcc運行時的源代碼? Linux-GCC/XCode運行時會終止所有線程嗎?如果不是,它如何處理main的返回值?

回答

0

相應的代碼,這是在「glibc的」比更復雜的公平位以上的MingW代碼(因爲它有很多的已經都編譯與它們相關的瓷磚和運行時選擇的選項):

http://sourceware.org/git/?p=glibc.git;a=blob;f=csu/libc-start.c;h=a14ed71616a3f63f092837e9c30780f8344b4fbe;hb=cvs/glibc-2_9-branch

然而,簡單的看法是,它的作用:

result = main (argc, argv, __environ MAIN_AUXVEC_PARAM); 
exit (result); 

是的,exit將殺死所有的線程(如果不出意外,該操作系統將在系統調用退出被調用_exit()