gcc and g++·Ö±ðÊÇgnuµÄc & c++±àÒëÆ÷ gcc/g++ÔÚÖ´ÐбàÒ빤×÷µÄʱºò£¬×ܹ²ÐèÒª4²½
1.Ô¤´¦Àí,Éú³É.iµÄÎļþ[Ô¤´¦ÀíÆ÷cpp]
2.½«Ô¤´¦ÀíºóµÄÎļþ²»×ª»»³É»ã±àÓïÑÔ,Éú³ÉÎļþ.s[±àÒëÆ÷egcs]
3.Óлã±à±äΪĿ±ê´úÂë(»úÆ÷´úÂë)Éú³É.oµÄÎļþ[»ã±àÆ÷as]
4.Á¬½ÓÄ¿±ê´úÂë,Éú³É¿ÉÖ´ÐгÌÐò[Á´½ÓÆ÷ld]
[²ÎÊýÏê½â]
-x language filename
¡¡ É趨ÎļþËùʹÓõÄÓïÑÔ,ʹºó׺ÃûÎÞЧ,¶ÔÒÔºóµÄ¶à¸öÓÐЧ.Ò²¾ÍÊǸù¾ÝÔ¼¶¨CÓïÑԵĺó׺Ãû³ÆÊÇ.cµÄ£¬¶øC++µÄºó׺ÃûÊÇ.C»òÕß.cpp,Èç¹ûÄãºÜ¸öÐÔ£¬¾ö¶¨ÄãµÄC´úÂëÎļþµÄºó׺ÃûÊÇ.pig ¹þ¹þ£¬ÄÇÄã¾ÍÒªÓÃÕâ¸ö²ÎÊý,Õâ¸ö²ÎÊý¶ÔËûºóÃæµÄÎļþÃû¶¼Æð×÷Ó㬳ý·Çµ½ÁËÏÂÒ»¸ö²ÎÊýµÄʹÓá£
¡¡¡¡¿ÉÒÔʹÓõIJÎÊýÂðÓÐÏÂÃæµÄÕâЩ
¡¡¡¡`c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.
¡¡¡¡¿´µ½Ó¢ÎÄ£¬Ó¦¸Ã¿ÉÒÔÀí½âµÄ¡£
¡¡¡¡Àý×ÓÓ÷¨:
¡¡¡¡gcc -x c hello.pig
¡¡¡¡
-x none filename
¡¡¡¡¹ØµôÉÏÒ»¸öÑ¡ÏҲ¾ÍÊÇÈÃgcc¸ù¾ÝÎļþÃûºó׺£¬×Ô¶¯Ê¶±ðÎļþÀàÐÍ
¡¡¡¡Àý×ÓÓ÷¨:
¡¡¡¡gcc -x c hello.pig -x none hello2.c
¡¡¡¡
-c
¡¡¡¡Ö»¼¤»îÔ¤´¦Àí,±àÒë,ºÍ»ã±à,Ò²¾ÍÊÇËûÖ»°Ñ³ÌÐò×ö³ÉobjÎļþ
¡¡¡¡Àý×ÓÓ÷¨:
¡¡¡¡gcc -c hello.c
¡¡¡¡Ëû½«Éú³É.oµÄobjÎļþ
-S
¡¡¡¡Ö»¼¤»îÔ¤´¦ÀíºÍ±àÒ룬¾ÍÊÇÖ¸°ÑÎļþ±àÒë³ÉΪ»ã±à´úÂë¡£
¡¡¡¡Àý×ÓÓ÷¨
¡¡¡¡gcc -S hello.c
¡¡¡¡Ëû½«Éú³É.sµÄ»ã±à´úÂ룬Äã¿ÉÒÔÓÃÎı¾±à¼Æ÷²ì¿´
-E
¡¡¡¡Ö»¼¤»îÔ¤´¦Àí,Õâ¸ö²»Éú³ÉÎļþ,ÄãÐèÒª°ÑËüÖØ¶¨Ïòµ½Ò»¸öÊä³öÎļþÀïÃæ.
¡¡¡¡Àý×ÓÓ÷¨:
¡¡¡¡gcc -E hello.c >; pianoapan.txt
¡¡¡¡gcc -E hello.c | more
¡¡¡¡ÂýÂý¿´°É,Ò»¸öhello word Ò²ÒªÓë´¦Àí³É800ÐеĴúÂë
-o
¡¡¡¡Öƶ¨Ä¿±êÃû³Æ,ȱʡµÄʱºò,gcc ±àÒë³öÀ´µÄÎļþÊÇa.out,ºÜÄÑÌý,Èç¹ûÄãºÍÎÒÓÐͬ¸Ð£¬¸ÄµôËü,¹þ¹þ
¡¡¡¡Àý×ÓÓ÷¨
¡¡¡¡gcc -o hello.exe hello.c (Ŷ,windowsÓÃϰ¹ßÁË)
¡¡¡¡gcc -o hello.asm -S hello.c
-pipe
¡¡¡¡Ê¹ÓùܵÀ´úÌæ±àÒëÖÐÁÙʱÎļþ,ÔÚʹÓ÷Çgnu»ã±à¹¤¾ßµÄʱºò,¿ÉÄÜÓÐЩÎÊÌâ
¡¡¡¡gcc -pipe -o hello.exe hello.c
-ansi
¡¡¡¡¹Ø±Õgnu cÖÐÓëansi c²»¼æÈݵÄÌØÐÔ,¼¤»îansi cµÄרÓÐÌØÐÔ(°üÀ¨½ûֹһЩasm inline typeof¹Ø¼ü×Ö,ÒÔ¼°UNIX,vaxµÈÔ¤´¦Àíºê,
-fno-asm
¡¡¡¡´ËÑ¡ÏîʵÏÖansiÑ¡ÏîµÄ¹¦ÄܵÄÒ»²¿·Ö£¬Ëü½ûÖ¹½«asm,inlineºÍtypeofÓÃ×÷¹Ø¼ü×Ö¡£ ¡¡¡¡¡¡¡¡
-fno-strict-prototype
¡¡¡¡Ö»¶Ôg++Æð×÷ÓÃ,ʹÓÃÕâ¸öÑ¡Ïî,g++½«¶Ô²»´ø²ÎÊýµÄº¯Êý,¶¼ÈÏΪÊÇûÓÐÏÔʽµÄ¶Ô²ÎÊýµÄ¸öÊýºÍÀàÐÍ˵Ã÷,¶ø²»ÊÇûÓвÎÊý.
¡¡¡¡¶øgccÎÞÂÛÊÇ·ñʹÓÃÕâ¸ö²ÎÊý,¶¼½«¶ÔûÓдø²ÎÊýµÄº¯Êý,ÈÏΪ³ÇûÓÐÏÔʽ˵Ã÷µÄÀàÐÍ
¡¡¡¡
-fthis-is-varialble
¡¡¡¡¾ÍÊÇÏò´«Í³c++¿´Æë,¿ÉÒÔʹÓÃthisµ±Ò»°ã±äÁ¿Ê¹ÓÃ.
¡¡¡¡
-fcond-mismatch
¡¡¡¡ÔÊÐíÌõ¼þ±í´ïʽµÄµÚ¶þºÍµÚÈý²ÎÊýÀàÐͲ»Æ¥Åä,±í´ïʽµÄÖµ½«ÎªvoidÀàÐÍ
¡¡¡¡
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
¡¡¡¡ÕâËĸö²ÎÊýÊǶÔcharÀàÐͽøÐÐÉèÖÃ,¾ö¶¨½«charÀàÐÍÉèÖóÉunsigned char(ǰÁ½¸ö²ÎÊý)»òÕß signed char(ºóÁ½¸ö²ÎÊý)
¡¡¡¡
-include file
¡¡¡¡°üº¬Ä³¸ö´úÂë,¼òµ¥À´Ëµ,¾ÍÊDZãÒÔij¸öÎļþ,ÐèÒªÁíÒ»¸öÎļþµÄʱºò,¾Í¿ÉÒÔÓÃËüÉ趨,¹¦ÄܾÍÏ൱ÓÚÔÚ´úÂëÖÐʹÓÃ#include
¡¡¡¡Àý×ÓÓ÷¨:
¡¡¡¡gcc hello.c -include /root/pianopan.h
¡¡¡¡
-imacros file
¡¡¡¡½«fileÎļþµÄºê,À©Õ¹µ½gcc/g++µÄÊäÈëÎļþ,ºê¶¨Òå±¾Éí²¢²»³öÏÖÔÚÊäÈëÎļþÖÐ
¡¡¡¡
-Dmacro
¡¡¡¡Ï൱ÓÚCÓïÑÔÖеÄ#define macro
¡¡¡¡
-Dmacro=defn
¡¡¡¡Ï൱ÓÚCÓïÑÔÖеÄ#define macro=defn
¡¡¡¡
-Umacro
¡¡¡¡Ï൱ÓÚCÓïÑÔÖеÄ#undef macro
-undef
¡¡¡¡È¡Ïû¶ÔÈκηDZê×¼ºêµÄ¶¨Òå
¡¡¡¡
-Idir
¡¡¡¡ÔÚÄãÊÇÓÃ#include"file"µÄʱºò,gcc/g++»áÏÈÔÚµ±Ç°Ä¿Â¼²éÕÒÄãËùÖÆ¶¨µÄÍ·Îļþ,Èç¹ûûÓÐÕÒµ½,Ëû»Øµ½È±Ê¡µÄÍ·ÎļþĿ¼ÕÒ,Èç¹ûʹÓÃ-IÖÆ¶¨ÁËĿ¼,Ëû
¡¡¡¡»ØÏÈÔÚÄãËùÖÆ¶¨µÄĿ¼²éÕÒ,È»ºóÔÙ°´³£¹æµÄ˳ÐòÈ¥ÕÒ.
¡¡¡¡¶ÔÓÚ#include
¡¡¡¡
-I-
¡¡¡¡¾ÍÊÇÈ¡Ïûǰһ¸ö²ÎÊýµÄ¹¦ÄÜ,ËùÒÔÒ»°ãÔÚ-IdirÖ®ºóʹÓÃ
¡¡¡¡
-idirafter dir
¡¡¡¡ÔÚ-IµÄĿ¼ÀïÃæ²éÕÒʧ°Ü,½²µ½Õâ¸öĿ¼ÀïÃæ²éÕÒ.
¡¡¡¡
-iprefix prefix
-iwithprefix dir
¡¡¡¡Ò»°ãÒ»ÆðʹÓÃ,µ±-IµÄĿ¼²éÕÒʧ°Ü,»áµ½prefix+dirϲéÕÒ
¡¡¡¡
-nostdinc
¡¡¡¡Ê¹±àÒëÆ÷²»ÔÙϵͳȱʡµÄÍ·ÎļþĿ¼ÀïÃæÕÒÍ·Îļþ,Ò»°ãºÍ-IÁªºÏʹÓÃ,Ã÷È·ÏÞ¶¨Í·ÎļþµÄλÖÃ
¡¡¡¡
-nostdin C++
¡¡¡¡¹æ¶¨²»ÔÚg++Ö¸¶¨µÄ±ê׼·¾ÖÐËÑË÷,µ«ÈÔÔÚÆäËû·¾¶ÖÐËÑË÷,.´ËÑ¡ÏîÔÚ´´libg++¿âʹÓÃ
¡¡¡¡
-C
¡¡¡¡ÔÚÔ¤´¦ÀíµÄʱºò,²»É¾³ý×¢ÊÍÐÅÏ¢,Ò»°ãºÍ-EʹÓÃ,ÓÐʱºò·ÖÎö³ÌÐò£¬ÓÃÕâ¸öºÜ·½±ãµÄ
¡¡¡¡
-M
¡¡¡¡Éú³ÉÎļþ¹ØÁªµÄÐÅÏ¢¡£°üº¬Ä¿±êÎļþËùÒÀÀµµÄËùÓÐÔ´´úÂëÄã¿ÉÒÔÓÃgcc -M hello.cÀ´²âÊÔһϣ¬ºÜ¼òµ¥¡£
¡¡¡¡
-MM
¡¡¡¡ºÍÉÏÃæµÄÄǸöÒ»Ñù£¬µ«ÊÇËü½«ºöÂÔÓÉ#include
¡¡¡¡
-MD
¡¡¡¡ºÍ-MÏàͬ£¬µ«ÊÇÊä³ö½«µ¼Èëµ½.dµÄÎļþÀïÃæ
¡¡¡¡
-MMD
¡¡¡¡ºÍ-MMÏàͬ£¬µ«ÊÇÊä³ö½«µ¼Èëµ½.dµÄÎļþÀïÃæ
¡¡¡¡
-Wa,option
¡¡¡¡´ËÑ¡Ïî´«µÝoption¸ø»ã±à³ÌÐò;Èç¹ûoptionÖмäÓжººÅ,¾Í½«option·Ö³É¶à¸öÑ¡Ïî,È»ºó´«µÝ¸ø»á»ã±à³ÌÐò
¡¡¡¡
-Wl.option
¡¡¡¡´ËÑ¡Ïî´«µÝoption¸øÁ¬½Ó³ÌÐò;Èç¹ûoptionÖмäÓжººÅ,¾Í½«option·Ö³É¶à¸öÑ¡Ïî,È»ºó´«µÝ¸ø»áÁ¬½Ó³ÌÐò.
¡¡¡¡
-llibrary
¡¡¡¡Öƶ¨±àÒëµÄʱºòʹÓõĿâ
¡¡¡¡Àý×ÓÓ÷¨
¡¡¡¡gcc -lcurses hello.c
¡¡¡¡Ê¹ÓÃncurses¿â±àÒë³ÌÐò
¡¡¡¡
-Ldir
¡¡¡¡Öƶ¨±àÒëµÄʱºò£¬ËÑË÷¿âµÄ·¾¶¡£±ÈÈçÄã×Ô¼ºµÄ¿â£¬¿ÉÒÔÓÃËüÖÆ¶¨Ä¿Â¼£¬²»È»
¡¡¡¡±àÒëÆ÷½«Ö»ÔÚ±ê×¼¿âµÄĿ¼ÕÒ¡£Õâ¸ödir¾ÍÊÇĿ¼µÄÃû³Æ¡£
¡¡¡¡
-O0
-O1
-O2
-O3
¡¡¡¡±àÒëÆ÷µÄÓÅ»¯Ñ¡ÏîµÄ4¸ö¼¶±ð£¬-O0±íʾûÓÐÓÅ»¯,-O1Ϊȱʡֵ£¬-O3ÓÅ»¯¼¶±ð×î¸ß¡¡¡¡ ¡¡¡¡
-g
¡¡¡¡Ö»ÊDZàÒëÆ÷£¬ÔÚ±àÒëµÄʱºò£¬²úÉúµ÷ÊÔÐÅÏ¢¡£
¡¡¡¡
-gstabs
¡¡¡¡´ËÑ¡ÏîÒÔstabs¸ñʽÉù³Æµ÷ÊÔÐÅÏ¢,µ«ÊDz»°üÀ¨gdbµ÷ÊÔÐÅÏ¢.
¡¡¡¡
-gstabs+
¡¡¡¡´ËÑ¡ÏîÒÔstabs¸ñʽÉù³Æµ÷ÊÔÐÅÏ¢,²¢ÇÒ°üº¬½ö¹©gdbʹÓõĶîÍâµ÷ÊÔÐÅÏ¢.
¡¡¡¡
-ggdb
¡¡¡¡´ËÑ¡Ï¾¡¿ÉÄܵÄÉú³ÉgdbµÄ¿ÉÒÔʹÓõĵ÷ÊÔÐÅÏ¢.
-static
¡¡¡¡´ËÑ¡Ï½ûֹʹÓö¯Ì¬¿â£¬ËùÒÔ£¬±àÒë³öÀ´µÄ¶«Î÷£¬Ò»°ã¶¼ºÜ´ó£¬Ò²²»ÐèҪʲô
¶¯Ì¬Á¬½Ó¿â£¬¾Í¿ÉÒÔÔËÐÐ.
-share
¡¡¡¡´ËÑ¡Ï¾¡Á¿Ê¹Óö¯Ì¬¿â£¬ËùÒÔÉú³ÉÎļþ±È½ÏС£¬µ«ÊÇÐèҪϵͳÓɶ¯Ì¬¿â.
-traditional
¡¡¡¡ÊÔͼÈñàÒëÆ÷Ö§³Ö´«Í³µÄCÓïÑÔÌØÐÔ
[²Î¿¼×ÊÁÏ]
-Linux/UNIX¸ß¼¶±à³Ì
¡¡¡¡ÖпƺìÆìÈí¼þ¼¼ÊõÓÐÏÞ¹«Ë¾±àÖø.Ç廪´óѧ³ö°æÉç³ö°æ
-Gcc man page
¡¡¡¡
[ChangeLog]
-2002-08-10
¡¡¡¡ver 0.1 ·¢²¼×î³õµÄÎĵµ
-2002-08-11
¡¡¡¡ver 0.11 ÐÞ¸ÄÎĵµ¸ñʽ
-2002-08-12
¡¡¡¡ver 0.12 ¼ÓÈëÁ˶Ծ²Ì¬¿â£¬¶¯Ì¬¿âµÄ²ÎÊý
-2002-08-16
¡¡¡¡ver 0.16 Ôö¼ÓÁËgcc±àÒëµÄ4¸ö½×¶ÎµÄÃüÁî
ÔËÐÐ gcc/egcs
**********ÔËÐÐ gcc/egcs***********************
¡¡¡¡GCC ÊÇ GNU µÄ C ºÍ C++ ±àÒëÆ÷¡£Êµ¼ÊÉÏ£¬GCC Äܹ»±àÒëÈýÖÖÓïÑÔ£ºC¡¢C++ ºÍ Object C£¨C ÓïÑÔµÄÒ»ÖÖÃæÏò¶ÔÏóÀ©Õ¹£©¡£ÀûÓà gcc ÃüÁî¿Éͬʱ±àÒë²¢Á¬½Ó C ºÍ C++ Ô´³ÌÐò¡£
¡¡¡¡Èç¹ûÄãÓÐÁ½¸ö»òÉÙÊý¼¸¸ö C Ô´Îļþ£¬Ò²¿ÉÒÔ·½±ãµØÀûÓà GCC ±àÒë¡¢Á¬½Ó²¢Éú³É¿ÉÖ´ÐÐÎļþ¡£ÀýÈ磬¼ÙÉèÄãÓÐÁ½¸öÔ´Îļþ main.c ºÍ factorial.c Á½¸öÔ´Îļþ£¬ÏÖÔÚÒª±àÒëÉú³ÉÒ»¸ö¼ÆËã½×³ËµÄ³ÌÐò¡£
´úÂë:
-----------------------
Çåµ¥ factorial.c
-----------------------
int factorial (int n)
{
¡¡¡¡if (n <= 1)
¡¡¡¡¡¡return 1;
¡¡¡¡else
¡¡¡¡¡¡return factorial (n - 1) * n;
}
-----------------------
Çåµ¥ main.c
-----------------------
#include¡¡
#include¡¡
int factorial (int n);
int main (int argc, char **argv)
{
¡¡¡¡int n;
¡¡¡¡if (argc < 2)
¡¡¡¡{
¡¡¡¡¡¡¡¡printf ("Usage: %s n\n", argv [0]);
¡¡¡¡¡¡¡¡return -1;
¡¡¡¡}
¡¡¡¡else
¡¡¡¡{
¡¡¡¡¡¡n = atoi (argv[1]);
¡¡¡¡¡¡printf ("Factorial of %d is %d.\n", n, factorial (n));
¡¡¡¡ }
¡¡¡¡return 0;
}
-----------------------
ÀûÓÃÈçϵÄÃüÁî¿É±àÒëÉú³É¿ÉÖ´ÐÐÎļþ£¬²¢Ö´ÐгÌÐò£º
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
¡¡¡¡GCC ¿ÉͬʱÓÃÀ´±àÒë C ³ÌÐòºÍ C++ ³ÌÐò¡£Ò»°ãÀ´Ëµ£¬C ±àÒëÆ÷ͨ¹ýÔ´ÎļþµÄºó׺ÃûÀ´ÅжÏÊÇ C ³ÌÐò»¹ÊÇ C++ ³ÌÐò¡£ÔÚ Linux ÖУ¬C Ô´ÎļþµÄºó׺ÃûΪ .c£¬¶ø C++ Ô´ÎļþµÄºó׺ÃûΪ .C »ò .cpp¡£µ«ÊÇ£¬gcc ÃüÁîÖ»ÄܱàÒë C++ Ô´Îļþ£¬¶ø²»ÄÜ×Ô¶¯ºÍ C++ ³ÌÐòʹÓõĿâÁ¬½Ó¡£Òò´Ë£¬Í¨³£Ê¹Óà g++ ÃüÁîÀ´Íê³É C++ ³ÌÐòµÄ±àÒëºÍÁ¬½Ó£¬¸Ã³ÌÐò»á×Ô¶¯µ÷Óà gcc ʵÏÖ±àÒë¡£¼ÙÉèÎÒÃÇÓÐÒ»¸öÈçÏ嵀 C++ Ô´Îļþ£¨hello.C£©£º
#include
void main (void)
{
¡¡¡¡cout << "Hello, world!" << endl;
}
Ôò¿ÉÒÔÈçϵ÷Óà g++ ÃüÁî±àÒë¡¢Á¬½Ó²¢Éú³É¿ÉÖ´ÐÐÎļþ£º
$ g++ -o hello hello.C
$ ./hello
Hello, world!
**********************gcc/egcs µÄÖ÷ҪѡÏî*********
gcc ÃüÁîµÄ³£ÓÃÑ¡Ïî
Ñ¡Ïî ½âÊÍ
-ansi Ö»Ö§³Ö ANSI ±ê×¼µÄ C Óï·¨¡£ÕâһѡÏ½ûÖ¹ GNU C µÄÄ³Ð©ÌØÉ«£¬
ÀýÈç asm »ò typeof ¹Ø¼ü´Ê¡£
-c Ö»±àÒë²¢Éú³ÉÄ¿±êÎļþ¡£
-DMACRO ÒÔ×Ö·û´®¡°1¡±¶¨Òå MACRO ºê¡£
-DMACRO=DEFN ÒÔ×Ö·û´®¡°DEFN¡±¶¨Òå MACRO ºê¡£
-E Ö»ÔËÐÐ C Ô¤±àÒëÆ÷¡£
-g Éú³Éµ÷ÊÔÐÅÏ¢¡£GNU µ÷ÊÔÆ÷¿ÉÀûÓøÃÐÅÏ¢¡£
-IDIRECTORY Ö¸¶¨¶îÍâµÄÍ·ÎļþËÑË÷·¾¶DIRECTORY¡£
-LDIRECTORY Ö¸¶¨¶îÍâµÄº¯Êý¿âËÑË÷·¾¶DIRECTORY¡£
-lLIBRARY Á¬½ÓʱËÑË÷Ö¸¶¨µÄº¯Êý¿âLIBRARY¡£
-m486 Õë¶Ô 486 ½øÐдúÂëÓÅ»¯¡£
-o FILE Éú³ÉÖ¸¶¨µÄÊä³öÎļþ¡£ÓÃÔÚÉú³É¿ÉÖ´ÐÐÎļþʱ¡£
-O0 ²»½øÐÐÓÅ»¯´¦Àí¡£
-O »ò -O1 ÓÅ»¯Éú³É´úÂë¡£
-O2 ½øÒ»²½ÓÅ»¯¡£
-O3 ±È -O2 ¸ü½øÒ»²½ÓÅ»¯£¬°üÀ¨ inline º¯Êý¡£
-shared Éú³É¹²ÏíÄ¿±êÎļþ¡£Í¨³£ÓÃÔÚ½¨Á¢¹²Ïí¿âʱ¡£
-static ½ûֹʹÓù²ÏíÁ¬½Ó¡£
-UMACRO È¡Ïû¶Ô MACRO ºêµÄ¶¨Òå¡£
-w ²»Éú³ÉÈκξ¯¸æÐÅÏ¢¡£
-Wall Éú³ÉËùÓо¯¸æÐÅÏ¢¡£

