Unix替代这个mingw运行时代码

时间:2013-08-23 10:38:49

标签: c++ linux mingw return-value exit-code

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的返回值?

1 个答案:

答案 0 :(得分: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()中调用退出系统调用时。