¡¡¡¡×÷ÕߣºÐ¤ÎÄÅô
¡¡¡¡ÔÚΪLinux¿ª·¢Ó¦ÓóÌÐòʱ£¬¾ø´ó¶àÊýÇé¿öÏÂʹÓõĶ¼ÊÇCÓïÑÔ£¬Òò´Ë¼¸ºõÿһλLinux³ÌÐòÔ±ÃæÁÙµÄÊ×ÒªÎÊÌⶼÊÇÈçºÎÁé»îÔËÓÃC±àÒëÆ÷¡£Ä¿Ç°Linux ÏÂ×î³£ÓõÄCÓïÑÔ±àÒëÆ÷ÊÇGCC£¨GNU Compiler Collection£©£¬ËüÊÇGNUÏîÄ¿ÖзûºÏANSI C±ê×¼µÄ±àÒëϵͳ£¬Äܹ»±àÒëÓÃC¡¢C++ºÍObject CµÈÓïÑÔ±àдµÄ³ÌÐò¡£GCC²»½ö¹¦Äܷdz£Ç¿´ó£¬½á¹¹Ò²Òì³£Áé»î¡£×îÖµµÃ³ÆµÀµÄÒ»µã¾ÍÊÇËü¿ÉÒÔͨ¹ý²»Í¬µÄÇ°¶ËÄ£¿éÀ´Ö§³Ö¸÷ÖÖÓïÑÔ£¬ÈçJava¡¢ Fortran¡¢Pascal¡¢Modula-3ºÍAdaµÈ¡£
¡¡¡¡¿ª·Å¡¢×ÔÓɺÍÁé»îÊÇLinuxµÄ÷ÈÁ¦ËùÔÚ£¬¶øÕâÒ»µãÔÚGCCÉϵÄÌåÏÖ¾ÍÊdzÌÐòԱͨ¹ýËüÄܹ»¸üºÃµØ¿ØÖÆÕû¸ö±àÒë¹ý³Ì¡£ÔÚʹÓÃGCC±àÒë³ÌÐòʱ£¬±àÒë¹ý³Ì¿ÉÒÔ±»Ï¸·ÖΪËĸö½×¶Î£º
¡¡¡¡¡ô Ô¤´¦Àí£¨Pre-Processing£©
¡¡¡¡¡ô ±àÒ루Compiling£©
¡¡¡¡¡ô »ã±à£¨Assembling£©
¡¡¡¡¡ô Á´½Ó£¨Linking£©
¡¡¡¡Linux³ÌÐòÔ±¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÐèÒªÈà GCCÔÚ±àÒëµÄÈκν׶νáÊø£¬ÒÔ±ã¼ì²é»òʹÓñàÒëÆ÷Ôڸý׶εÄÊä³öÐÅÏ¢£¬»òÕ߶Ô×îºóÉú³ÉµÄ¶þ½øÖÆÎļþ½øÐпØÖÆ£¬ÒÔ±ãͨ¹ý¼ÓÈ벻ͬÊýÁ¿ºÍÖÖÀàµÄµ÷ÊÔ´úÂëÀ´Îª½ñºóµÄµ÷ÊÔ×öºÃ×¼±¸¡£ºÍÆäËü³£ÓõıàÒëÆ÷Ò»Ñù£¬GCCÒ²ÌṩÁËÁé»î¶øÇ¿´óµÄ´úÂëÓÅ»¯¹¦ÄÜ£¬ÀûÓÃËü¿ÉÒÔÉú³ÉÖ´ÐÐЧÂʸü¸ßµÄ´úÂë¡£
¡¡¡¡GCCÌṩÁË30¶àÌõ¾¯¸æÐÅÏ¢ºÍÈý¸ö¾¯¸æ¼¶±ð£¬Ê¹ÓÃËüÃÇÓÐÖúÓÚÔöÇ¿³ÌÐòµÄÎȶ¨ÐԺͿÉÒÆÖ²ÐÔ¡£´ËÍ⣬GCC»¹¶Ô±ê×¼µÄCºÍC++ÓïÑÔ½øÐÐÁË´óÁ¿µÄÀ©Õ¹£¬Ìá¸ß³ÌÐòµÄÖ´ÐÐЧÂÊ£¬ÓÐÖúÓÚ±àÒëÆ÷½øÐдúÂëÓÅ»¯£¬Äܹ»¼õÇá±à³ÌµÄ¹¤×÷Á¿¡£
jeffkuang1 ÓÚ 2013-10-14 15:34:11·¢±í:
¶¥Ò»Ï¡£
snowlee ÓÚ 2013-08-03 17:31:28·¢±í:
ÓеãÁèÂÒ,²»ÈçÖ±½Ó¿´½Ì²ÄÀ´µÄºÃ
lzqlike ÓÚ 2013-07-13 10:01:02·¢±í:
²»´í
dell2009 ÓÚ 2013-07-07 16:05:06·¢±í:
´°¿Ú³ÌÐò±È¿ØÖÆ̨³ÌÐò¸üÖØÒª
dell2009 ÓÚ 2013-07-07 16:03:54·¢±í:
Äܲ»Äܲ»Ö´ÃÔÓÚlinux¿ØÖÆ̨³ÌÐòµÄ¿ª·¢£¬¶øÈ¥¹Ø×¢linux´°¿Ú³ÌÐòµÄ¿ª·¢£¿
farseerlee ÓÚ 2013-07-02 15:18:20·¢±í:
Õâ¸öÎÄÕ²»´í
mkg2000 ÓÚ 2013-07-01 23:15:05·¢±í:
ºÃÎÄÕ£¬Ð»Ð»Â¥Ö÷
ÍøÂçÇ鱨վ ÓÚ 2013-07-01 11:43:42·¢±í:
¶àл
ÑÌÏûÔÆÉ¢ ÓÚ 2013-06-06 00:06:40·¢±í:
ÆäʵÔÚ# gcc hello.c -o helloÕâÒ»²½Ö®Ç°»¹¿ÉÒÔ¼ÓÒ»¸ö# gcc hello.c -S hello.s ÕâÑù»á¿´µ½Æäϵͳ±àÒëµÄ»ã±à´úÂ룬µ±È»ÔÚ±àÒë³É¹¦µÄhello¿ÉÖ´ÐÐÎļþÖ®ºó»¹¿ÉÒÔ¶ÔÆä½øÐз´±àÒ룬ÖÕ¶ËÃüÁîÊÇ£º# objdump -d hello¼´¿É¿´µ½·´±àÒëµÄ´úÂ룬ÕâÀï·´±àÒë³öÀ´µÄÊÇAT&T¸ñʽµÄ»ã±à¡£Ö÷º¯Êý´úÂëÊÇ´Ómain£º¿ªÊ¼µÄ¡£
jabwking ÓÚ 2013-06-03 10:37:40·¢±í:
ºÃÌû×Ó
11hwu2 ÓÚ 2013-04-22 01:05:36·¢±í:
ºÜ²»´íºÜÏêϸ
davidpike ÓÚ 2006-10-23 15:11:32·¢±í:
дµÃºÜ²»´í£¬ÓпÕÒª¶à¿´£¡
jzlk ÓÚ 2006-10-19 15:28:24·¢±í:
2410linux ÓÚ 2006-10-13 18:13:41·¢±í:
hao
SmileAgain ÓÚ 2006-10-12 12:22:12·¢±í:
¡¡¡¡µ÷ÊÔ
¡¡¡¡Ò»¸ö¹¦ÄÜÇ¿´óµÄµ÷ÊÔÆ÷²»½öΪ³ÌÐòÔ±ÌṩÁ˸ú×Ù³ÌÐòÖ´ÐеÄÊֶΣ¬¶øÇÒ»¹¿ÉÒÔ°ïÖú³ÌÐòÔ±ÕÒµ½½â¾öÎÊÌâµÄ·½·¨¡£¶ÔÓÚLinux³ÌÐòÔ±À´½²£¬GDB£¨GNU Debugger£©Í¨¹ýÓëGCCµÄÅäºÏʹÓã¬Îª»ùÓÚLinuxµÄÈí¼þ¿ª·¢ÌṩÁËÒ»¸öÍêÉƵĵ÷ÊÔ»·¾³¡£
¡¡¡¡Ä¬ÈÏÇé¿öÏ£¬GCCÔÚ±àÒëʱ²»»á½«µ÷ÊÔ·ûºÅ²åÈëµ½Éú³ÉµÄ¶þ½øÖÆ´úÂëÖУ¬ÒòΪÕâÑù»áÔö¼Ó¿ÉÖ´ÐÐÎļþµÄ´óС¡£Èç¹ûÐèÒªÔÚ±àÒëʱÉú³Éµ÷ÊÔ·ûºÅÐÅÏ¢£¬¿ÉÒÔʹÓÃGCC µÄ-g»òÕß-ggdbÑ¡Ïî¡£GCCÔÚ²úÉúµ÷ÊÔ·ûºÅʱ£¬Í¬Ñù²ÉÓÃÁË·Ö¼¶µÄ˼·£¬¿ª·¢ÈËÔ±¿ÉÒÔͨ¹ýÔÚ-gÑ¡Ïîºó¸½¼ÓÊý×Ö1¡¢2»ò3À´Ö¸¶¨ÔÚ´úÂëÖмÓÈëµ÷ÊÔÐÅÏ¢µÄ¶àÉÙ¡£Ä¬Èϵļ¶±ðÊÇ2£¨-g2£©£¬´Ëʱ²úÉúµÄµ÷ÊÔÐÅÏ¢°üÀ¨À©Õ¹µÄ·ûºÅ±í¡¢Ðкš¢¾Ö²¿»òÍⲿ±äÁ¿ÐÅÏ¢¡£¼¶±ð3£¨-g3£©°üº¬¼¶±ð2ÖеÄËùÓе÷ÊÔÐÅÏ¢£¬ÒÔ¼°Ô´´úÂëÖж¨ÒåµÄºê¡£¼¶±ð1£¨-g1£©²»°üº¬¾Ö²¿±äÁ¿ºÍÓëÐкÅÓйصĵ÷ÊÔÐÅÏ¢£¬Òò´ËÖ»Äܹ»ÓÃÓÚ»ØËݸú×ٺͶÑջת´¢Ö®Ó᣻ØËݸú×ÙÖ¸µÄÊǼàÊÓ³ÌÐòÔÚÔËÐйý³ÌÖеĺ¯Êýµ÷ÓÃÀúÊ·£¬¶Ñջת´¢ÔòÊÇÒ»ÖÖÒÔÔʼµÄÊ®Áù½øÖƸñʽ±£´æ³ÌÐòÖ´Ðл·¾³µÄ·½·¨£¬Á½Õ߶¼ÊǾ³£Óõ½µÄµ÷ÊÔÊֶΡ£
¡¡¡¡GCC²úÉúµÄµ÷ÊÔ·ûºÅ¾ßÓÐÆÕ±éµÄÊÊÓ¦ÐÔ£¬¿ÉÒÔ±»Ðí¶àµ÷ÊÔÆ÷¼ÓÒÔÀûÓ㬵«Èç¹ûʹÓõÄÊÇGDB£¬ÄÇô»¹¿ÉÒÔͨ¹ý-ggdbÑ¡ÏîÔÚÉú³ÉµÄ¶þ½øÖÆ´úÂëÖаüº¬GDBרÓõĵ÷ÊÔÐÅÏ¢¡£ÕâÖÖ×ö·¨µÄÓŵãÊÇ¿ÉÒÔ·½±ãGDBµÄµ÷ÊÔ¹¤×÷£¬µ«È±µãÊÇ¿ÉÄܵ¼ÖÂÆäËüµ÷ÊÔÆ÷£¨ÈçDBX£©ÎÞ·¨½øÐÐÕý³£µÄµ÷ÊÔ¡£Ñ¡Ïî-ggdbÄܹ»½ÓÊܵĵ÷ÊÔ¼¶±ðºÍ-gÊÇÍêÈ«Ò»ÑùµÄ£¬ËüÃǶÔÊä³öµÄµ÷ÊÔ·ûºÅÓÐ×ÅÏàͬµÄÓ°Ïì¡£
¡¡¡¡ÐèҪעÒâµÄÊÇ£¬Ê¹ÓÃÈκÎÒ»¸öµ÷ÊÔÑ¡Ï»áʹ×îÖÕÉú³ÉµÄ¶þ½øÖÆÎļþµÄ´óС¼±¾çÔö¼Ó£¬Í¬Ê±Ôö¼Ó³ÌÐòÔÚÖ´ÐÐʱµÄ¿ªÏú£¬Òò´Ëµ÷ÊÔÑ¡Ïîͨ³£½öÔÚÈí¼þµÄ¿ª·¢ºÍµ÷ÊԽ׶ÎʹÓᣵ÷ÊÔÑ¡Ïî¶ÔÉú³É´úÂë´óСµÄÓ°Ïì´ÓÏÂÃæµÄ¶Ô±È¹ý³ÌÖпÉÒÔ¿´³öÀ´£º
[code]# gcc optimize.c -o optimize
# ls optimize -l
-rwxrwxr-x 1 xiaowp xiaowp 11649 Nov 20 08:53 optimize (δ¼Óµ÷ÊÔÑ¡Ïî)
# gcc -g optimize.c -o optimize
# ls optimize -l
-rwxrwxr-x 1 xiaowp xiaowp 15889 Nov 20 08:54 optimize (¼ÓÈëµ÷ÊÔÑ¡Ïî)[/code]
¡¡¡¡ËäÈ»µ÷ÊÔÑ¡Ïî»áÔö¼ÓÎļþµÄ´óС£¬µ«ÊÂʵÉÏLinuxÖеÄÐí¶àÈí¼þÔÚ²âÊÔ°æ±¾ÉõÖÁ×îÖÕ·¢Ðа汾ÖÐÈÔȻʹÓÃÁ˵÷ÊÔÑ¡ÏîÀ´½øÐбàÒ룬ÕâÑù×öµÄÄ¿µÄÊǹÄÀøÓû§ÔÚ·¢ÏÖÎÊÌâʱ×Ô¼º¶¯ÊÖ½â¾ö£¬ÊÇLinuxµÄÒ»¸öÏÔÖøÌØÉ«¡£
¡¡¡¡ÏÂÃ滹ÊÇͨ¹ýÒ»¸ö¾ßÌåµÄʵÀý˵Ã÷ÈçºÎÀûÓõ÷ÊÔ·ûºÅÀ´·ÖÎö´íÎó£¬ËùÓóÌÐò¼ûÇåµ¥4Ëùʾ¡£
¡¡¡¡Çåµ¥4£ºcrash.c
[code]#include
int main(void)
{
int input =0;
printf("Input an integer:");
scanf("%d", input);
printf("The integer you input is %d\\n", input);
return 0;
}[/code]
¡¡¡¡±àÒë²¢ÔËÐÐÉÏÊö´úÂ룬»á²úÉúÒ»¸öÑÏÖصĶδíÎó£¨Segmentation fault£©ÈçÏ£º
[code]# gcc -g crash.c -o crash
# ./crash
Input an integer:10
Segmentation fault[/code]
¡¡¡¡ÎªÁ˸ü¿ìËٵط¢ÏÖ´íÎóËùÔÚ£¬¿ÉÒÔʹÓÃGDB½øÐиú×Ùµ÷ÊÔ£¬·½·¨ÈçÏ£º
[code]# gdb crash
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
¡¡
(gdb)[/code]
¡¡¡¡µ±GDBÌáʾ·û³öÏÖµÄʱºò£¬±íÃ÷GDBÒѾ×öºÃ×¼±¸½øÐе÷ÊÔÁË£¬ÏÖÔÚ¿ÉÒÔͨ¹ýrunÃüÁîÈóÌÐò¿ªÊ¼ÔÚGDBµÄ¼à¿ØÏÂÔËÐУº
[code](gdb) run
Starting program: /home/xiaowp/thesis/gcc/code/crash
Input an integer:10
Program received signal SIGSEGV, Segmentation fault.
0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6[/code]
¡¡¡¡×Ðϸ·ÖÎöÒ»ÏÂGDB¸ø³öµÄÊä³ö½á¹û²»ÄÑ¿´³ö£¬³ÌÐòÊÇÓÉÓڶδíÎó¶øµ¼ÖÂÒì³£ÖÐÖ¹µÄ£¬ËµÃ÷ÄÚ´æ²Ù×÷³öÁËÎÊÌ⣬¾ßÌå·¢ÉúÎÊÌâµÄµØ·½ÊÇÔÚµ÷ÓÃ_IO_vfscanf_internal ( )µÄʱºò¡£ÎªÁ˵õ½¸ü¼ÓÓмÛÖµµÄÐÅÏ¢£¬¿ÉÒÔʹÓÃGDBÌṩµÄ»ØËݸú×ÙÃüÁîbacktrace£¬Ö´Ðнá¹ûÈçÏ£º
[code](gdb) backtrace
#0 0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6
#1 0xbffff0c0 in ?? ()
#2 0x4008e0ba in scanf () from /lib/libc.so.6
#3 0x08048393 in main () at crash.c:11
#4 0x40042917 in __libc_start_main () from /lib/libc.so.6[/code]
¡¡¡¡Ìø¹ýÊä³ö½á¹ûÖеÄÇ°ÃæÈýÐУ¬´ÓÊä³ö½á¹ûµÄµÚËÄÐÐÖв»ÄÑ¿´³ö£¬GDBÒѾ½«´íÎó¶¨Î»µ½crash.cÖеĵÚ11ÐÐÁË¡£ÏÖÔÚ×Ðϸ¼ì²éһϣº
[code](gdb) frame 3
#3 0x08048393 in main () at crash.c:11
11 scanf("%d", input);[/code]
¡¡¡¡Ê¹ÓÃGDBÌṩµÄframeÃüÁî¿ÉÒÔ¶¨Î»µ½·¢Éú´íÎóµÄ´úÂë¶Î£¬¸ÃÃüÁîºóÃæ¸ú×ŵÄÊýÖµ¿ÉÒÔÔÚbacktraceÃüÁîÊä³ö½á¹ûÖеÄÐÐÊ×ÕÒµ½¡£ÏÖÔÚÒѾ·¢ÏÖ´íÎóËùÔÚÁË£¬Ó¦¸Ã½«
[code]scanf("%d", input);
¸ÄΪ
scanf("%d", &input);[/code]
¡¡¡¡Íê³Éºó¾Í¿ÉÒÔÍ˳öGDBÁË£¬ÃüÁîÈçÏ£º
[code](gdb) quit[/code]
¡¡¡¡GDBµÄ¹¦ÄÜÔ¶Ô¶²»Ö¹Èç´Ë£¬Ëü»¹¿ÉÒÔµ¥²½¸ú×Ù³ÌÐò¡¢¼ì²éÄÚ´æ±äÁ¿ºÍÉèÖöϵãµÈ¡£
¡¡¡¡µ÷ÊÔʱ¿ÉÄÜ»áÐèÒªÓõ½±àÒëÆ÷²úÉúµÄÖмä½á¹û£¬Õâʱ¿ÉÒÔʹÓÃ-save-tempsÑ¡ÏÈÃGCC½«Ô¤´¦Àí´úÂë¡¢»ã±à´úÂëºÍÄ¿±ê´úÂ붼×÷ΪÎļþ±£´æÆðÀ´¡£Èç¹ûÏë¼ì²éÉú³ÉµÄ´úÂëÊÇ·ñÄܹ»Í¨¹ýÊÖ¹¤µ÷ÕûµÄ°ì·¨À´Ìá¸ßÖ´ÐÐÐÔÄÜ£¬ÔÚ±àÒë¹ý³ÌÖÐÉú³ÉµÄÖмäÎļþ½«»áºÜÓаïÖú£¬¾ßÌåÇé¿öÈçÏ£º
[code]# gcc -save-temps foo.c -o foo
# ls foo*
foo foo.c foo.i foo.s[/code]
¡¡¡¡GCC Ö§³ÖµÄÆäËüµ÷ÊÔÑ¡Ï°üÀ¨-pºÍ-pg£¬ËüÃǻὫÆÊÎö£¨Profiling£©ÐÅÏ¢¼ÓÈëµ½×îÖÕÉú³ÉµÄ¶þ½øÖÆ´úÂëÖС£ÆÊÎöÐÅÏ¢¶ÔÓÚÕÒ³ö³ÌÐòµÄÐÔÄÜÆ¿¾±ºÜÓаïÖú£¬ÊÇÐÖúLinux³ÌÐòÔ±¿ª·¢³ö¸ßÐÔÄܳÌÐòµÄÓÐÁ¦¹¤¾ß¡£ÔÚ±àÒëʱ¼ÓÈë-pÑ¡Ïî»áÔÚÉú³ÉµÄ´úÂëÖмÓÈëͨÓÃÆÊÎö¹¤¾ß£¨Prof£©Äܹ»Ê¶±ðµÄͳ¼ÆÐÅÏ¢£¬¶ø- pgÑ¡ÏîÔòÉú³ÉÖ»ÓÐGNUÆÊÎö¹¤¾ß£¨Gprof£©²ÅÄÜʶ±ðµÄͳ¼ÆÐÅÏ¢¡£
¡¡¡¡×îºóÌáÐÑÒ»µã£¬ËäÈ»GCCÔÊÐíÔÚÓÅ»¯µÄͬʱ¼ÓÈëµ÷ÊÔ·ûºÅÐÅÏ¢£¬µ«ÓÅ»¯ºóµÄ´úÂë¶ÔÓÚµ÷ÊÔ±¾Éí¶øÑÔ½«ÊÇÒ»¸öºÜ´óµÄÌôÕ½¡£´úÂëÔÚ¾¹ýÓÅ»¯Ö®ºó£¬ÔÚÔ´³ÌÐòÖÐÉùÃ÷ºÍʹÓõıäÁ¿ºÜ¿ÉÄܲ»ÔÙʹÓ㬿ØÖÆÁ÷Ò²¿ÉÄÜ»áͻȻÌøתµ½ÒâÍâµÄµØ·½£¬Ñ»·Óï¾äÓпÉÄÜÒòΪѻ·Õ¹¿ª¶ø±äµÃµ½´¦¶¼ÓУ¬ËùÓÐÕâЩ¶Ôµ÷ÊÔÀ´½²¶¼½«ÊÇÒ»³¡Ø¬ÃΡ£½¨ÒéÔÚµ÷ÊÔµÄʱºò×îºÃ²»Ê¹ÓÃÈκÎÓÅ»¯Ñ¡ÏֻÓе±³ÌÐòÔÚ×îÖÕ·¢ÐеÄʱºò²Å¿¼ÂǶÔÆä½øÐÐÓÅ»¯¡£
SmileAgain ÓÚ 2006-10-12 12:22:01·¢±í:
¡¡¡¡´úÂëÓÅ»¯
¡¡¡¡´úÂëÓÅ»¯Ö¸µÄÊDZàÒëÆ÷ͨ¹ý·ÖÎöÔ´´úÂ룬ÕÒ³öÆäÖÐÉÐδ´ïµ½×îÓŵIJ¿·Ö£¬È»ºó¶ÔÆäÖØнøÐÐ×éºÏ£¬Ä¿µÄÊǸÄÉƳÌÐòµÄÖ´ÐÐÐÔÄÜ¡£GCCÌṩµÄ´úÂëÓÅ»¯¹¦Äܷdz£Ç¿´ó£¬Ëüͨ¹ý±àÒëÑ¡Ïî-OnÀ´¿ØÖÆÓÅ»¯´úÂëµÄÉú³É£¬ÆäÖÐnÊÇÒ»¸ö´ú±íÓÅ»¯¼¶±ðµÄÕûÊý¡£¶ÔÓÚ²»Í¬°æ±¾µÄGCCÀ´½²£¬nµÄÈ¡Öµ·¶Î§¼°Æä¶ÔÓ¦µÄÓÅ»¯Ð§¹û¿ÉÄܲ¢²»ÍêÈ«Ïàͬ£¬±È½ÏµäÐ͵ķ¶Î§ÊÇ´Ó0±ä»¯µ½2»ò3¡£
¡¡¡¡±àÒëʱʹÓÃÑ¡Ïî-O¿ÉÒÔ¸æËß GCCͬʱ¼õС´úÂëµÄ³¤¶ÈºÍÖ´ÐÐʱ¼ä£¬ÆäЧ¹ûµÈ¼ÛÓÚ-O1¡£ÔÚÕâÒ»¼¶±ðÉÏÄܹ»½øÐеÄÓÅ»¯ÀàÐÍËäȻȡ¾öÓÚÄ¿±ê´¦ÀíÆ÷£¬µ«Ò»°ã¶¼»á°üÀ¨Ïß³ÌÌøת£¨Thread Jump£©ºÍÑÓ³ÙÍËÕ»£¨Deferred Stack Pops£©Á½ÖÖÓÅ»¯¡£Ñ¡Ïî-O2¸æËßGCC³ýÁËÍê³ÉËùÓÐ-O1¼¶±ðµÄÓÅ»¯Ö®Í⣬ͬʱ»¹Òª½øÐÐһЩ¶îÍâµÄµ÷Õû¹¤×÷£¬Èç´¦ÀíÆ÷Ö¸Áîµ÷¶ÈµÈ¡£Ñ¡Ïî-O3Ôò³ýÁËÍê³ÉËùÓÐ-O2¼¶±ðµÄÓÅ»¯Ö®Í⣬»¹°üÀ¨Ñ»·Õ¹¿ªºÍÆäËüһЩÓë´¦ÀíÆ÷ÌØÐÔÏà¹ØµÄÓÅ»¯¹¤×÷¡£Í¨³£À´Ëµ£¬Êý×ÖÔ½´óÓÅ»¯µÄµÈ¼¶Ô½¸ß£¬Í¬Ê±Ò²¾ÍÒâζ×ųÌÐòµÄÔËÐÐËÙ¶ÈÔ½¿ì¡£Ðí¶àLinux³ÌÐòÔ±¶¼Ï²»¶Ê¹ÓÃ-O2Ñ¡ÏÒòΪËüÔÚÓÅ»¯³¤¶È¡¢±àÒëʱ¼äºÍ´úÂë´óС֮¼ä£¬È¡µÃÁËÒ»¸ö±È½ÏÀíÏëµÄƽºâµã¡£
¡¡¡¡ÏÂÃæͨ¹ý¾ßÌåʵÀýÀ´¸ÐÊÜÒ»ÏÂGCCµÄ´úÂëÓÅ»¯¹¦ÄÜ£¬ËùÓóÌÐòÈçÇåµ¥3Ëùʾ¡£
¡¡¡¡Çåµ¥3£ºoptimize.c
[code]#include
int main(void)
{
double counter;
double result;
double temp;
for (counter = 0;
counter < 2000.0 * 2000.0 * 2000.0 / 20.0 + 2020;
counter += (5 - 1) / 4) {
temp = counter / 1979;
result = counter;
}
printf("Result is %lf\\n", result);
return 0;
}[/code]
¡¡¡¡Ê×ÏȲ»¼ÓÈκÎÓÅ»¯Ñ¡Ïî½øÐбàÒ룺
[code]# gcc -Wall optimize.c -o optimize[/code]
¡¡¡¡½èÖúLinuxÌṩµÄtimeÃüÁ¿ÉÒÔ´óÖÂͳ¼Æ³ö¸Ã³ÌÐòÔÚÔËÐÐʱËùÐèÒªµÄʱ¼ä£º
[code]# time ./optimize
Result is 400002019.000000
real 0m14.942s
user 0m14.940s
sys 0m0.000s[/code]
¡¡¡¡½ÓÏÂȥʹÓÃÓÅ»¯Ñ¡ÏîÀ´¶Ô´úÂë½øÐÐÓÅ»¯´¦Àí£º
[code]# gcc -Wall -O optimize.c -o optimize[/code]
¡¡¡¡ÔÚͬÑùµÄÌõ¼þÏÂÔٴβâÊÔÒ»ÏÂÔËÐÐʱ¼ä£º
[code]# time ./optimize
Result is 400002019.000000
real 0m3.256s
user 0m3.240s
sys 0m0.000s[/code]
¡¡¡¡¶Ô±ÈÁ½´ÎÖ´ÐеÄÊä³ö½á¹û²»ÄÑ¿´³ö£¬³ÌÐòµÄÐÔÄܵÄÈ·µÃµ½Á˺ܴó·ù¶ÈµÄ¸ÄÉÆ£¬ÓÉÔÀ´µÄ14ÃëËõ¶Ìµ½ÁË3Ãë¡£Õâ¸öÀý×ÓÊÇרÃÅÕë¶ÔGCCµÄÓÅ»¯¹¦ÄܶøÉè¼ÆµÄ£¬Òò´ËÓÅ»¯Ç°ºó³ÌÐòµÄÖ´ÐÐËٶȷ¢ÉúÁ˺ܴóµÄ¸Ä±ä¡£¾¡¹ÜGCCµÄ´úÂëÓÅ»¯¹¦Äܷdz£Ç¿´ó£¬µ«×÷ΪһÃûÓÅÐãµÄLinux³ÌÐòÔ±£¬Ê×ÏÈ»¹ÊÇÒªÁ¦ÇóÄܹ»ÊÖ¹¤±àд³ö¸ßÖÊÁ¿µÄ´úÂë¡£Èç¹û±àдµÄ´úÂë¼ò¶Ì£¬²¢ÇÒÂß¼ÐÔÇ¿£¬±àÒëÆ÷¾Í²»»á×ö¸ü¶àµÄ¹¤×÷£¬ÉõÖÁ¸ù±¾Óò»×ÅÓÅ»¯¡£
¡¡¡¡ÓÅ»¯ËäÈ»Äܹ»¸ø³ÌÐò´øÀ´¸üºÃµÄÖ´ÐÐÐÔÄÜ£¬µ«ÔÚÈçÏÂһЩ³¡ºÏÖÐÓ¦¸Ã±ÜÃâÓÅ»¯´úÂ룺
¡¡¡¡¡ô ³ÌÐò¿ª·¢µÄʱºò ÓÅ»¯µÈ¼¶Ô½¸ß£¬ÏûºÄÔÚ±àÒëÉϵÄʱ¼ä¾ÍÔ½³¤£¬Òò´ËÔÚ¿ª·¢µÄʱºò×îºÃ²»ÒªÊ¹ÓÃÓÅ»¯Ñ¡ÏֻÓе½Èí¼þ·¢Ðлò¿ª·¢½áÊøµÄʱºò£¬²Å¿¼ÂǶÔ×îÖÕÉú³ÉµÄ´úÂë½øÐÐÓÅ»¯¡£
¡¡¡¡¡ô ×ÊÔ´ÊÜÏÞµÄʱºò һЩÓÅ»¯Ñ¡Ïî»áÔö¼Ó¿ÉÖ´ÐдúÂëµÄÌå»ý£¬Èç¹û³ÌÐòÔÚÔËÐÐʱÄܹ»ÉêÇëµ½µÄÄÚ´æ×ÊÔ´·Ç³£½ôÕÅ£¨ÈçһЩʵʱǶÈëʽÉ豸£©£¬ÄǾͲ»Òª¶Ô´úÂë½øÐÐÓÅ»¯£¬ÒòΪÓÉÕâ´øÀ´µÄ¸ºÃæÓ°Ïì¿ÉÄÜ»á²úÉú·Ç³£ÑÏÖصĺó¹û¡£
¡¡¡¡¡ô ¸ú×Ùµ÷ÊÔµÄʱºò ÔÚ¶Ô´úÂë½øÐÐÓÅ»¯µÄʱºò£¬Ä³Ð©´úÂë¿ÉÄܻᱻɾ³ý»ò¸Äд£¬»òÕßΪÁËÈ¡µÃ¸ü¼ÑµÄÐÔÄܶø½øÐÐÖØ×飬´Ó¶øʹ¸ú×ٺ͵÷ÊÔ±äµÃÒì³£À§ÄÑ¡£
SmileAgain ÓÚ 2006-10-12 12:21:36·¢±í:
¡¡¡¡¿âÒÀÀµ
¡¡¡¡ÔÚLinux Ï¿ª·¢Èí¼þʱ£¬ÍêÈ«²»Ê¹ÓõÚÈý·½º¯Êý¿âµÄÇé¿öÊDZȽÏÉÙ¼ûµÄ£¬Í¨³£À´½²¶¼ÐèÒª½èÖúÒ»¸ö»ò¶à¸öº¯Êý¿âµÄÖ§³Ö²ÅÄܹ»Íê³ÉÏàÓ¦µÄ¹¦ÄÜ¡£´Ó³ÌÐòÔ±µÄ½Ç¶È¿´£¬º¯Êý¿âʵ¼ÊÉϾÍÊÇһЩͷÎļþ£¨.h£©ºÍ¿âÎļþ£¨.so»òÕß.a£©µÄ¼¯ºÏ¡£ËäÈ»LinuxϵĴó¶àÊýº¯Êý¶¼Ä¬ÈϽ«Í·Îļþ·Åµ½/usr/include/Ŀ¼Ï£¬¶ø¿âÎļþÔò·Åµ½/usr/lib/Ŀ¼Ï£¬µ«²¢²»ÊÇËùÓеÄÇé¿ö¶¼ÊÇÕâÑù¡£ÕýÒòÈç´Ë£¬GCCÔÚ±àÒëʱ±ØÐëÓÐ×Ô¼ºµÄ°ì·¨À´²éÕÒËùÐèÒªµÄÍ·ÎļþºÍ¿âÎļþ¡£
¡¡¡¡GCC²ÉÓÃËÑË÷Ŀ¼µÄ°ì·¨À´²éÕÒËùÐèÒªµÄÎļþ£¬-IÑ¡Ïî¿ÉÒÔÏòGCCµÄÍ·ÎļþËÑË÷·¾¶ÖÐÌí¼ÓеÄĿ¼¡£ÀýÈ磬Èç¹ûÔÚ/home/xiaowp/include/Ŀ¼ÏÂÓбàÒëʱËùÐèÒªµÄÍ·Îļþ£¬ÎªÁËÈÃGCCÄܹ»Ë³ÀûµØÕÒµ½ËüÃÇ£¬¾Í¿ÉÒÔʹÓÃ-IÑ¡Ï
[code]# gcc foo.c -I /home/xiaowp/include -o foo[/code]
¡¡¡¡Í¬Ñù£¬Èç¹ûʹÓÃÁ˲»ÔÚ±ê׼λÖõĿâÎļþ£¬ÄÇô¿ÉÒÔͨ¹ý-LÑ¡ÏîÏòGCCµÄ¿âÎļþËÑË÷·¾¶ÖÐÌí¼ÓеÄĿ¼¡£ÀýÈ磬Èç¹ûÔÚ/home/xiaowp/lib/Ŀ¼ÏÂÓÐÁ´½ÓʱËùÐèÒªµÄ¿âÎļþlibfoo.so£¬ÎªÁËÈÃGCCÄܹ»Ë³ÀûµØÕÒµ½Ëü£¬¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁ
[code]# gcc foo.c -L /home/xiaowp/lib -lfoo -o foo[/code]
¡¡¡¡ÖµµÃºÃºÃ½âÊÍһϵÄÊÇ-lÑ¡ÏËüָʾGCCÈ¥Á¬½Ó¿âÎļþlibfoo.so¡£LinuxϵĿâÎļþÔÚÃüÃûʱÓÐÒ»¸öÔ¼¶¨£¬ÄǾÍÊÇÓ¦¸ÃÒÔlibÈý¸ö×Öĸ¿ªÍ·£¬ÓÉÓÚËùÓеĿâÎļþ¶¼×ñÑÁËͬÑùµÄ¹æ·¶£¬Òò´ËÔÚÓÃ-lÑ¡ÏîÖ¸¶¨Á´½ÓµÄ¿âÎļþÃûʱ¿ÉÒÔÊ¡È¥libÈý¸ö×Öĸ£¬Ò²¾ÍÊÇ˵GCCÔÚ¶Ô-lfoo½øÐд¦Àíʱ£¬»á×Ô¶¯È¥Á´½ÓÃûΪlibfoo.soµÄÎļþ¡£
¡¡¡¡LinuxϵĿâÎļþ·ÖΪÁ½´óÀà·Ö±ðÊǶ¯Ì¬Á´½Ó¿â£¨Í¨³£ÒÔ.so½á⣩ºÍ¾²Ì¬Á´½Ó¿â£¨Í¨³£ÒÔ.a½á⣩£¬Á½ÕߵIJî±ð½öÔÚ³ÌÐòÖ´ÐÐʱËùÐèµÄ´úÂëÊÇÔÚÔËÐÐʱ¶¯Ì¬¼ÓÔصģ¬»¹ÊÇÔÚ±àÒëʱ¾²Ì¬¼ÓÔصġ£Ä¬ÈÏÇé¿öÏ£¬GCCÔÚÁ´½ÓʱÓÅÏÈʹÓö¯Ì¬Á´½Ó¿â£¬Ö»Ó屶¯Ì¬Á´½Ó¿â²»´æÔÚʱ²Å¿¼ÂÇʹÓþ²Ì¬Á´½Ó¿â£¬Èç¹ûÐèÒªµÄ»°¿ÉÒÔÔÚ±àÒëʱ¼ÓÉÏ-staticÑ¡ÏǿÖÆʹÓþ²Ì¬Á´½Ó¿â¡£ÀýÈ磬Èç¹ûÔÚ/home/xiaowp/lib/Ŀ¼ÏÂÓÐÁ´½ÓʱËùÐèÒªµÄ¿âÎļþlibfoo.soºÍlibfoo.a£¬ÎªÁËÈà GCCÔÚÁ´½ÓʱֻÓõ½¾²Ì¬Á´½Ó¿â£¬¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁ
[code]# gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo[/code]
SmileAgain ÓÚ 2006-10-12 12:21:13·¢±í:
¡¡¡¡¾¯¸æÌáʾ¹¦ÄÜ
¡¡¡¡GCC°üº¬ÍêÕûµÄ³ö´í¼ì²éºÍ¾¯¸æÌáʾ¹¦ÄÜ£¬ËüÃÇ¿ÉÒÔ°ïÖúLinux³ÌÐòԱд³ö¸ü¼ÓרҵºÍÓÅÃÀµÄ´úÂë¡£ÏÈÀ´¶Á¶ÁÇåµ¥2ËùʾµÄ³ÌÐò£¬Õâ¶Î´úÂëдµÃºÜÔã¸â£¬×Ðϸ¼ì²éһϲ»ÄÑÌô³öºÜ¶à벡£º
¡¡¡¡¡ômainº¯ÊýµÄ·µ»ØÖµ±»ÉùÃ÷Ϊvoid£¬µ«Êµ¼ÊÉÏÓ¦¸ÃÊÇint£»
¡¡¡¡¡ôʹÓÃÁËGNUÓï·¨À©Õ¹£¬¼´Ê¹ÓÃlong longÀ´ÉùÃ÷64λÕûÊý£¬²»·ûºÏANSI/ISO CÓïÑÔ±ê×¼£»
¡¡¡¡¡ômainº¯ÊýÔÚÖÕֹǰûÓе÷ÓÃreturnÓï¾ä¡£
¡¡¡¡Çåµ¥2£ºillcode.c
[code]#include
void main(void)
{
long long int var = 1;
printf("It is not standard C code!\\n");
}[/code]
¡¡¡¡ÏÂÃæÀ´¿´¿´GCCÊÇÈçºÎ°ïÖú³ÌÐòÔ±À´·¢ÏÖÕâЩ´íÎóµÄ¡£µ±GCCÔÚ±àÒë²»·ûºÏANSI/ISO CÓïÑÔ±ê×¼µÄÔ´´úÂëʱ£¬Èç¹û¼ÓÉÏÁË-pedanticÑ¡ÏÄÇôʹÓÃÁËÀ©Õ¹Óï·¨µÄµØ·½½«²úÉúÏàÓ¦µÄ¾¯¸æÐÅÏ¢£º
[code]# gcc -pedantic illcode.c -o illcode
illcode.c: In function `main':
illcode.c:9: ISO C89 does not support `long long'
illcode.c:8: return type of `main' is not `int'[/code]
¡¡¡¡ÐèҪעÒâµÄÊÇ£¬-pedantic±àÒëÑ¡Ïî²¢²»Äܱ£Ö¤±»±àÒë³ÌÐòÓëANSI/ISO C±ê×¼µÄÍêÈ«¼æÈÝ£¬Ëü½ö½öÖ»ÄÜÓÃÀ´°ïÖúLinux³ÌÐòÔ±ÀëÕâ¸öÄ¿±êÔ½À´Ô½½ü¡£»òÕß»»¾ä»°Ëµ£¬-pedanticÑ¡ÏîÄܹ»°ïÖú³ÌÐòÔ±·¢ÏÖһЩ²»·ûºÏANSI/ISO C±ê×¼µÄ´úÂ룬µ«²»ÊÇÈ«²¿£¬ÊÂʵÉÏÖ»ÓÐANSI/ISO CÓïÑÔ±ê×¼ÖÐÒªÇó½øÐбàÒëÆ÷Õï¶ÏµÄÄÇЩÇé¿ö£¬²ÅÓпÉÄܱ»GCC·¢ÏÖ²¢Ìá³ö¾¯¸æ¡£
¡¡¡¡³ýÁË-pedanticÖ®Í⣬GCC»¹ÓÐһЩÆäËü±àÒëÑ¡ÏîÒ²Äܹ»²úÉúÓÐÓõľ¯¸æÐÅÏ¢¡£ÕâЩѡÏî´ó¶àÒÔ-W¿ªÍ·£¬ÆäÖÐ×îÓмÛÖµµÄµ±Êý-WallÁË£¬Ê¹ÓÃËüÄܹ»Ê¹GCC²úÉú¾¡¿ÉÄܶàµÄ¾¯¸æÐÅÏ¢£º
[code]# gcc -Wall illcode.c -o illcode
illcode.c:8: warning: return type of `main' is not `int'
illcode.c: In function `main':
illcode.c:9: warning: unused variable `var'[/code]
¡¡¡¡GCC¸ø³öµÄ¾¯¸æÐÅÏ¢ËäÈ»´ÓÑϸñÒâÒåÉÏ˵²»ÄÜËã×÷ÊÇ´íÎ󣬵«È´ºÜ¿ÉÄܳÉΪ´íÎóµÄÆÜÉíÖ®Ëù¡£Ò»¸öÓÅÐãµÄLinux³ÌÐòÔ±Ó¦¸Ã¾¡Á¿±ÜÃâ²úÉú¾¯¸æÐÅÏ¢£¬Ê¹×Ô¼ºµÄ´úÂëʼÖÕ±£³Ö¼ò½à¡¢ÓÅÃÀºÍ½¡×³µÄÌØÐÔ¡£
¡¡¡¡ÔÚ´¦Àí¾¯¸æ·½Ã棬ÁíÒ»¸ö³£ÓõıàÒëÑ¡ÏîÊÇ-Werror£¬ËüÒªÇóGCC½«ËùÓеľ¯¸æµ±³É´íÎó½øÐд¦Àí£¬ÕâÔÚʹÓÃ×Ô¶¯±àÒ빤¾ß£¨ÈçMakeµÈ£©Ê±·Ç³£ÓÐÓá£Èç¹û±àÒëʱ´øÉÏ-WerrorÑ¡ÏÄÇôGCC»áÔÚËùÓвúÉú¾¯¸æµÄµØ·½Í£Ö¹±àÒ룬ÆÈʹ³ÌÐòÔ±¶Ô×Ô¼ºµÄ´úÂë½øÐÐÐ޸ġ£Ö»Óе±ÏàÓ¦µÄ¾¯¸æÐÅÏ¢Ïû³ýʱ£¬²Å¿ÉÄܽ«±àÒë¹ý³Ì¼ÌÐø³¯Ç°Íƽø¡£Ö´ÐÐÇé¿öÈçÏ£º
[code]# gcc -Wall -Werror illcode.c -o illcode
cc1: warnings being treated as errors
illcode.c:8: warning: return type of `main' is not `int'
illcode.c: In function `main':
illcode.c:9: warning: unused variable `var'[/code]
¡¡¡¡¶ÔLinux³ÌÐòÔ±À´½²£¬GCC¸ø³öµÄ¾¯¸æÐÅÏ¢ÊǺÜÓмÛÖµµÄ£¬ËüÃDz»½ö¿ÉÒÔ°ïÖú³ÌÐòԱд³ö¸ü¼Ó½¡×³µÄ³ÌÐò£¬¶øÇÒ»¹ÊǸú×ٺ͵÷ÊÔ³ÌÐòµÄÓÐÁ¦¹¤¾ß¡£½¨ÒéÔÚÓÃGCC±àÒëÔ´´úÂëʱʼÖÕ´øÉÏ-WallÑ¡Ï²¢°ÑËüÖð½¥ÅàÑø³ÉΪһÖÖÏ°¹ß£¬Õâ¶ÔÕÒ³ö³£¼ûµÄÒþʽ±à³Ì´íÎóºÜÓаïÖú¡£
SmileAgain ÓÚ 2006-10-12 12:20:46·¢±í:
¡¡¡¡GCCÆð²½
¡¡¡¡ÔÚѧϰʹÓÃGCC֮ǰ£¬ÏÂÃæµÄÕâ¸öÀý×ÓÄܹ»°ïÖúÓû§Ñ¸ËÙÀí½âGCCµÄ¹¤×÷ÔÀí£¬²¢½«ÆäÁ¢¼´ÔËÓõ½Êµ¼ÊµÄÏîÄ¿¿ª·¢ÖÐÈ¥¡£Ê×ÏÈÓÃÊìϤµÄ±à¼Æ÷ÊäÈëÇåµ¥1ËùʾµÄ´úÂ룺
¡¡¡¡Çåµ¥1£ºhello.c
[code]#include
int main(void)
{
printf ("Hello world, Linux programming!\\n");
return 0;
}[/code]
¡¡¡¡È»ºóÖ´ÐÐÏÂÃæµÄÃüÁî±àÒëºÍÔËÐÐÕâ¶Î³ÌÐò£º
[code]# gcc hello.c -o hello
# ./hello
Hello world, Linux programming![/code]
¡¡¡¡´Ó³ÌÐòÔ±µÄ½Ç¶È¿´£¬Ö»Ðè¼òµ¥µØÖ´ÐÐÒ»ÌõGCCÃüÁî¾Í¿ÉÒÔÁË£¬µ«´Ó±àÒëÆ÷µÄ½Ç¶ÈÀ´¿´£¬È´ÐèÒªÍê³ÉһϵÁзdz£·±ÔӵŤ×÷¡£Ê×ÏÈ£¬GCCÐèÒªµ÷ÓÃÔ¤´¦Àí³ÌÐò cpp£¬ÓÉËü¸ºÔðÕ¹¿ªÔÚÔ´ÎļþÖж¨ÒåµÄºê£¬²¢ÏòÆäÖвåÈë¡°#include¡±Óï¾äËù°üº¬µÄÄÚÈÝ£»½Ó×Å£¬GCC»áµ÷ÓÃcclºÍas½«´¦ÀíºóµÄÔ´´úÂë±àÒë³ÉÄ¿±ê´úÂ룻×îºó£¬GCC»áµ÷ÓÃÁ´½Ó³ÌÐòld£¬°ÑÉú³ÉµÄÄ¿±ê´úÂëÁ´½Ó³ÉÒ»¸ö¿ÉÖ´ÐгÌÐò¡£
¡¡¡¡ÎªÁ˸üºÃµØÀí½âGCCµÄ¹¤×÷¹ý³Ì£¬¿ÉÒÔ°ÑÉÏÊö±àÒë¹ý³Ì·Ö³É¼¸¸ö²½Öèµ¥¶À½øÐУ¬²¢¹Û²ìÿ²½µÄÔËÐнá¹û¡£µÚÒ»²½ÊǽøÐÐÔ¤±àÒ룬ʹÓÃ-E²ÎÊý¿ÉÒÔÈÃGCCÔÚÔ¤´¦Àí½áÊøºóÍ£Ö¹±àÒë¹ý³Ì£º
[code]# gcc -E hello.c -o hello.i[/code]
¡¡¡¡´ËʱÈô²é¿´hello.cppÎļþÖеÄÄÚÈÝ£¬»á·¢ÏÖstdio.hµÄÄÚÈÝȷʵ¶¼²åµ½ÎļþÀïÈ¥ÁË£¬¶øÆäËüÓ¦µ±±»Ô¤´¦ÀíµÄºê¶¨ÒåÒ²¶¼×öÁËÏàÓ¦µÄ´¦Àí¡£ÏÂÒ»²½Êǽ«hello.i±àÒëΪĿ±ê´úÂ룬Õâ¿ÉÒÔͨ¹ýʹÓÃ-c²ÎÊýÀ´Íê³É£º
[code]# gcc -c hello.i -o hello.o[/code]
¡¡¡¡GCCĬÈϽ«.iÎļþ¿´³ÉÊÇÔ¤´¦ÀíºóµÄCÓïÑÔÔ´´úÂ룬Òò´ËÉÏÊöÃüÁ×Ô¶¯Ìø¹ýÔ¤´¦Àí²½Öè¶ø¿ªÊ¼Ö´ÐбàÒë¹ý³Ì£¬Ò²¿ÉÒÔʹÓÃ-x²ÎÊýÈÃGCC´ÓÖ¸¶¨µÄ²½Ö迪ʼ±àÒë¡£×îºóÒ»²½Êǽ«Éú³ÉµÄÄ¿±êÎļþÁ´½Ó³É¿ÉÖ´ÐÐÎļþ£º
[code]# gcc hello.o -o hello[/code]
¡¡¡¡ÔÚ²ÉÓÃÄ£¿é»¯µÄÉè¼Æ˼Ïë½øÐÐÈí¼þ¿ª·¢Ê±£¬Í¨³£Õû¸ö³ÌÐòÊÇÓɶà¸öÔ´Îļþ×é³ÉµÄ£¬ÏàÓ¦µØÒ²¾ÍÐγÉÁ˶à¸ö±àÒëµ¥Ôª£¬Ê¹ÓÃGCCÄܹ»ºÜºÃµØ¹ÜÀíÕâЩ±àÒëµ¥Ôª¡£¼ÙÉèÓÐÒ»¸öÓÉfoo1.cºÍfoo2.cÁ½¸öÔ´Îļþ×é³ÉµÄ³ÌÐò£¬ÎªÁ˶ÔËüÃǽøÐбàÒ룬²¢×îÖÕÉú³É¿ÉÖ´ÐгÌÐòfoo£¬¿ÉÒÔʹÓÃÏÂÃæÕâÌõÃüÁ
[code]# gcc foo1.c foo2.c -o foo[/code]
¡¡¡¡Èç¹ûͬʱ´¦ÀíµÄÎļþ²»Ö¹Ò»¸ö£¬GCCÈÔÈ»»á°´ÕÕÔ¤´¦Àí¡¢±àÒëºÍÁ´½ÓµÄ¹ý³ÌÒÀ´Î½øÐС£Èç¹ûÉÆðÀ´£¬ÉÏÃæÕâÌõÃüÁî´óÖÂÏ൱ÓÚÒÀ´ÎÖ´ÐÐÈçÏÂÈýÌõÃüÁ
[code]# gcc -c foo1.c -o foo1.o
# gcc -c foo2.c -o foo2.o
# gcc foo1.o foo2.o -o foo[/code]
¡¡¡¡ÔÚ±àÒëÒ»¸ö°üº¬Ðí¶àÔ´ÎļþµÄ¹¤³Ìʱ£¬ÈôÖ»ÓÃÒ»ÌõGCCÃüÁîÀ´Íê³É±àÒëÊǷdz£ÀË·Ñʱ¼äµÄ¡£¼ÙÉèÏîÄ¿ÖÐÓÐ100¸öÔ´ÎļþÐèÒª±àÒ룬²¢ÇÒÿ¸öÔ´ÎļþÖж¼°üº¬ 10000ÐдúÂ룬Èç¹ûÏñÉÏÃæÄÇÑù½öÓÃÒ»ÌõGCCÃüÁîÀ´Íê³É±àÒ빤×÷£¬ÄÇôGCCÐèÒª½«Ã¿¸öÔ´Îļþ¶¼ÖØбàÒëÒ»±é£¬È»ºóÔÙÈ«²¿Á¬½ÓÆðÀ´¡£ºÜÏÔÈ»£¬ÕâÑùÀ˷ѵÄʱ¼äÏ൱¶à£¬ÓÈÆäÊǵ±Óû§Ö»ÊÇÐÞ¸ÄÁËÆäÖÐijһ¸öÎļþµÄʱºò£¬ÍêȫûÓбØÒª½«Ã¿¸öÎļþ¶¼ÖØбàÒëÒ»±é£¬ÒòΪºÜ¶àÒѾÉú³ÉµÄÄ¿±êÎļþÊDz»»á¸Ä±äµÄ¡£Òª½â¾öÕâ¸öÎÊÌ⣬¹Ø¼üÊÇÒªÁé»îÔËÓÃGCC£¬Í¬Ê±»¹Òª½èÖúÏñMakeÕâÑùµÄ¹¤¾ß¡£