ÂÒÏëÂÒд·ÉÎèÖ®¿Õ¼ä
´ÓÁ㿪ʼ£¬Ñ§Ï°windows±à³Ì(4)--´Ólibc.lib¿ªÊ¼
´ÓÉÏһƪÎÄÕÂÖУ¬´ó¼ÒÒѾÁ˽⵽ÓÐCÔËÐÐʱ¿âÕâ¸ö¸ÅÄÕâ¸ö²»ËãÊÇж«Î÷£¬µ«ÊÇÒ»°ã¶¼Òþ²ØÔÚÄ»ºó£¬C/C++ÓïÑÔ½ÌѧµÄʱºò²»½²£¬windows/linux±à³ÌµÄʱºòËÆºõÒ²²»»áרÃŽ²µ½¡£²»¹ýËüÒ»°ãÊÇÎÒÃÇC/C++±à³ÌÖÐĬÈÏ»áʹÓõÄÒ»¸öÖØÒª²¿·Ö¡£»ØÏëÏ룬ÎÒÃÇËæÊÖ´ò³öµÄstrcpy, memset, memcpyµÈµÈ£¬²»¾ÍÊÇCÔËÐÐʱ¿âËùÌṩ³öÀ´µÄ¶«Î÷Âð£¿
¼ÈÈ»ÕâÑù£¬¾ÍÒªºÃºÃÑо¿Ò»ÏÂÕâ¸ö¶«Î÷ÁË¡£
Ç°ÃæÒѾ˵¹ý£¬Õë¶Ôµ¥Ïß³Ì/¶àỊ̈߳¬¾²Ì¬/¶¯Ì¬Á´½Ó£¬ÊÇ·ñÊÇdebug°æ±¾£¬VC6µÄCÔËÐÐʱ¿âÌṩÁË6¸ö°æ±¾¡£¾ßÌå¿ÉÒÔ¿´ÏÂÃæµÄ½ØÍ¼¡£

¶øÆäÖÐÿһ¸öÑ¡Ôñ¶ÔÓ¦µÄLIBÎļþ£¬ÔÚÉÏһƪÖÐÒѾÓÐÒ»¸öÁбí½éÉÜÁË£¬ÕâÀï¾Í²»Öظ´Ð´ÁË¡£ÕâÀïÒ²²»È«²¿Ò»ÏÂ×Ó½«ËùÓеͼÑо¿Ò»Ï£¬»¹Êǰ´ÕÕÓÉdzÈëÉîµÄÔÔò£¬´Ó×î¼òµ¥µÄ²¿·Ö¿ªÊ¼£¬µ±È»£¬Ò²»áÔÚÇ£Éæµ½ÆäËû²¿·ÖµÄʱºò£¬½øÐÐÒ»¶¨µÄ˵Ã÷¡£
×î¼òµ¥µÄµ±È»ÊÇSingle-Threaded£¬Í¬Ê±Ò²ÊÇstatic linkµÄÁË¡£Æä¶ÔÓ¦µÄÎļþΪLIBC.LIB¡£¶ÔÓ¦CLµÄ±àÒëÑ¡ÏîΪ/ML¡£
¼ÈȻҪÑо¿Õâ¸öLIBÎļþ£¬Äǵ±È»ÊÇÓÐÔ´Âë×îºÃÁË£¬jjhou²»ÊÇ˵¹ý£¬¡°Ô´ÂëÃæÇ°£¬ÁËÎÞÃØÃÜ¡±Âð¡£ÄÇÎÒÃÇÔÚÄÄÀïÕÒµ½ÓÐÔ´ÂëÄØ£¿
Ö»ÒªÄã°²×°ÁËVC6£¬Ëü¾Í´øÓÐCRTµÄÔ´Â룬¾ßÌåĿ¼ºÍÄã°²×°VC6µÄĿ¼Óйأ¬ÔÚÎÒµçÄÔÉϵÄ·¾¶Îª¡°d:Program FilesMicrosoft Visual StudioVC98CRTSRC¡±£¬Äã½øÈ¥Ö®ºó»á·¢ÏÖ£¬ÀïÃæÓв»ÉÙÊìϤµÄÃû×Ö£¬Èç¡°MATH.H¡±¡¢¡°STDIO.H¡±¡¢¡°STDLIB.H¡±¡¢¡°STRING.H¡±µÈ£¬ÓÉÓÚCÔËÐÐʱ¿â±»C++ÔËÐÐʱ¿â°üº¬£¬ËùÒÔÕâÀïÃæ»¹ÓÐC++±ê×¼¿âµÄ´úÂ룬ËùÒÔ»¹ÄÜ¿´µ½¡°IOSTREAM¡±¡¢¡°CSTDIO¡±¡¢¡°algorithm¡±µÈC++µÄstdÍ·Îļþ¡£
ÕâÀï¾Í³öÏÖÁËÒ»¸öÎÊÌ⣬ÕâÀïµÄÎļþÓгɰÙÉÏǧ¸ö£¬ÎÒÃÇÒ»¸ö¸öÈ«²¿¿´ÊDz»¿ÉÄܵģ¬ÄÇÈçºÎÕÒ³ö¹Ø¼üµÄ²¿·ÖÀ´ÄØ£¿
Èç¹û»¹¶ÔÉÏһƪµÄ·ÖÎöÓÐÓ¡Ï󣬲¢ÇÒ´øÓÐÎÊÌâµÄͬѧ£¬Ó¦¸ÃºÜÈÝÒ×ÁªÏëµ½£¬ÎÒÃÇÔÚlink²»´øÓÐdefaultlibsÐÅÏ¢µÄhello.objÎļþʱ£¬³öÏÖÁËÁ½¸öLINK2001´íÎ󣬷ֱðÊÇÕÒ²»µ½_printfºÍ_mainCRTStartupÕâÁ½¸ösymbolÎļþ¡£
±àÒëÆ÷CLÔÚ±àÒëC³ÌÐòµÄʱºò£¬ÄÚ²¿½«ÐèÒª±àÒëµÄº¯ÊýÇ°Ãæ¼ÓÉÏÏ»®Ïß(_)ÓÃÀ´±êʶ£¬_printf¾ßÌåÖ¸µÄ¾ÍÊÇprintfº¯Êý£¬_mainCRTStartupÔòÊÇmainCRTStartup£¬ÊÇÔÚÄÄÀïʹÓõÄÄØ£¿
ÎÒÃÇÒѾ֪µÀ£¬printfº¯ÊýºÍmainCRTStartupº¯ÊýµÄʵÏÖ¶¼ÊÇÔÚLIBC.LIBÖУ¬printf£¬ÊÇÎÒÃÇmainº¯ÊýÖÐÓÃÀ´´òÓ¡ÐÅÏ¢µÄ£¬¶ømainCRTStartup£¬ÔòÊÇhello.exeµÄÈë¿Ú(entry point)¡£
Èë¿Ú
ѧ¹ýCÓïÑÔµÄÈ˶¼ÖªµÀ£¬ÓÐÒ»¸ömainº¯Êý£¬ÊÇÒ»¸ö³ÌÐòµÄÈë¿Ú¡£²»¹ÜÔõÑù£¬mainº¯ÊýÊÇÌØÊâµÄ¡£ÔÚTCPL (¡°The C programming Language¡± by K&R) µÄ1.1Õ½ڣ¬½éÉÜHello WorldµÄʱºò˵µÄÒ»¶Î»°£º
Now, for some explanations about the program itself. A C program, whatever its size, consists of functions and variables. A function contains statements that specify the computing operations to be done, and variables store values used during the computation. C functions are like the subroutines and functions in Fortran or the procedures and functions of Pascal. Our example is a function named main. Normally you are at liberty to give functions whatever names you like, but ¡°main¡± is special - your program begins executing at the beginning of main. This means that every program must have a main somewhere.
ÒòΪÕâÒ»¶Î»°£¬ÒòΪÕâ±¾ÊéµÄ¾µä£¬ºÜ¶àÈ˰üÀ¨ÎÒ˼·¶¼ºÜÄÑת±ä¡£Ò»Ö±¶¼ÈÏΪmain¾ÍÊÇC³ÌÐòµÄÈë¿Úº¯Êý¡£²»¹ý£¬ÕæµÄÊÇÕâÑùÂð£¿
ʹÓûã±àµÄͯЬ¶¼ÖªµÀ£¬»ã±àµÄÈë¿Úº¯ÊýÖ»ÊÇÒ»¸ö·ûºÅ£¬ÊÇ¿ÉÒÔËæÒⶨÒåµÄ£¬Ö®ºó¾Í´ÓÈë¿Ú¿ªÊ¼£¬PCÒ»ÌõÌõµÄ¿ªÊ¼Ö´Ðлã±à´úÂë¡£¶ÔÓÚC³ÌÐòÀ´Ëµ£¬mainÒ²ÊÇÒ»¸ö·ûºÅ¶øÒÑ£¬²»¹ýÕâ¸ö·ûºÅÓë»ã±àµÄ_startÓÐÐ©Çø±ð£¬_start¿ÉÒÔÓÃÆäËû·ûºÅÖ±½Ó´úÌæ£¬¶øÔÚwindowsϵͳÏ£¬VC¿ª·¢µÄ»·¾³ÖУ¬ÎÒÃǵÄhello.exeµÄmainº¯Êý֮ǰ»¹ÓÐÒ»¸ömainCRTStartup£¨ºô£¬ºÃ¶àÏÞÖÆÌõ¼þ£¬ºÃÈÆ¿Ú¡¡£©¡£
crt0.c
ΪʲôÐèÒªmainCRTStartupÄØ£¬ÎÒÃÇ»¹ÊÇÒª¿´Ò»ÏÂÔ´ÂëʵÏÖ¡£ÏÈËÑË÷µ½mainCRTStartupËùÔÚµÄÎļþ£¬Îªcrt0.c£¬ÆäÈ«²¿´úÂëÈçÏ£º
show sourceview sourceprint 001 /***
002 *crt0.c - C runtime initialization routine
003 *
004 * Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.
005 *
006 *Purpose:
007 * This the actual startup routine for apps. It calls the users main
008 * routine [w]main() or [w]WinMain after performing C Run-Time Library
009 * initialization.
010 *
011 * (With ifdefs, this source file also provides the source code for
012 * wcrt0.c, the startup routine for console apps with wide characters,
013 * wincrt0.c, the startup routine for Windows apps, and wwincrt0.c,
014 * the startup routine for Windows apps with wide characters.)
015 *
016 *******************************************************************************/
017
018 #ifdef _WIN32
019
020 #ifndef CRTDLL
021
022 #include
023 #include
024 #include
025 #include
026 #include
027 #include
028 #includ