Linuxç³»ç»ä¸çGccï¼GNU C Compilerï¼æ¯GNUæ¨åºçåè½å¼ºå¤§ãæ§è½ä¼è¶çå¤å¹³å°ç¼è¯å¨ï¼æ¯GNUç代表ä½åä¹ä¸ãgccæ¯å¯ä»¥å¨å¤ç§ç¡¬ä½å¹³å°ä¸ç¼è¯åºå¯æ§è¡ç¨åºçè¶
级ç¼è¯å¨ï¼å
¶æ§è¡æçä¸ä¸è¬çç¼è¯å¨ç¸æ¯å¹³åæçè¦é«20%~30%ã
Gccç¼è¯å¨è½å°CãC++è¯è¨æºç¨åºãæ±ç¨å¼ååºåç®æ ç¨åºç¼è¯ãè¿æ¥æå¯æ§è¡æ件ï¼å¦æ没æç»åºå¯æ§è¡æ件çååï¼gccå°çæä¸ä¸ªå为a.outçæ件ãå¨Linuxç³»ç»ä¸ï¼å¯æ§è¡æ件没æç»ä¸çåç¼ï¼ç³»ç»ä»æ件çå±æ§æ¥åºåå¯æ§è¡æ件åä¸å¯æ§è¡æ件ãègccåéè¿åç¼æ¥åºå«è¾å
¥æ件çç±»å«ï¼ä¸é¢æ们æ¥ä»ç»gccæéµå¾ªçé¨å约å®è§åã
.c为åç¼çæ件ï¼Cè¯è¨æºä»£ç æ件ï¼
.a为åç¼çæ件ï¼æ¯ç±ç®æ æ件ææçæ¡£æ¡åºæ件ï¼
.Cï¼.ccæ.cxx 为åç¼çæ件ï¼æ¯C++æºä»£ç æ件ï¼
.h为åç¼çæ件ï¼æ¯ç¨åºæå
å«ç头æ件ï¼
.i 为åç¼çæ件ï¼æ¯å·²ç»é¢å¤çè¿çCæºä»£ç æ件ï¼
.ii为åç¼çæ件ï¼æ¯å·²ç»é¢å¤çè¿çC++æºä»£ç æ件ï¼
.m为åç¼çæ件ï¼æ¯Objective-Cæºä»£ç æ件ï¼
.o为åç¼çæ件ï¼æ¯ç¼è¯åçç®æ æ件ï¼
.s为åç¼çæ件ï¼æ¯æ±ç¼è¯è¨æºä»£ç æ件ï¼
.S为åç¼çæ件ï¼æ¯ç»è¿é¢ç¼è¯çæ±ç¼è¯è¨æºä»£ç æ件ã
Gccçæ§è¡è¿ç¨
è½ç¶æ们称Gccæ¯Cè¯è¨çç¼è¯å¨ï¼ä½ä½¿ç¨gccç±Cè¯è¨æºä»£ç æ件çæå¯æ§è¡æ件çè¿ç¨ä¸ä»
ä»
æ¯ç¼è¯çè¿ç¨ï¼èæ¯è¦ç»åå个ç¸äºå
³èçæ¥éª¤â¶é¢å¤ç(ä¹ç§°é¢ç¼è¯ï¼Preprocessing)ãç¼è¯(Compilation)ãæ±ç¼(Assembly)åè¿æ¥(Linking)ã
å½ä»¤gccé¦å
è°ç¨cppè¿è¡é¢å¤çï¼å¨é¢å¤çè¿ç¨ä¸ï¼å¯¹æºä»£ç æ件ä¸çæ件å
å«(include)ãé¢ç¼è¯è¯å¥(å¦å®å®ä¹defineç)è¿è¡åæãæ¥çè°ç¨cc1è¿è¡ç¼è¯ï¼è¿ä¸ªé¶æ®µæ ¹æ®è¾å
¥æ件çæ以.o为åç¼çç®æ æ件ãæ±ç¼è¿ç¨æ¯é对æ±ç¼è¯è¨çæ¥éª¤ï¼è°ç¨asè¿è¡å·¥ä½ï¼ä¸è¬æ¥è®²ï¼.S为åç¼çæ±ç¼è¯è¨æºä»£ç æ件åæ±ç¼ã.s为åç¼çæ±ç¼è¯è¨æ件ç»è¿é¢ç¼è¯åæ±ç¼ä¹åé½çæ以.o为åç¼çç®æ æ件ãå½ææçç®æ æ件é½çæä¹åï¼gccå°±è°ç¨ldæ¥å®ææåçå
³é®æ§å·¥ä½ï¼è¿ä¸ªé¶æ®µå°±æ¯è¿æ¥ãå¨è¿æ¥é¶æ®µï¼ææçç®æ æ件被å®æå¨å¯æ§è¡ç¨åºä¸çæ°å½çä½ç½®ï¼åæ¶ï¼è¯¥ç¨åºæè°ç¨å°çåºå½æ°ä¹ä»åèªæå¨çæ¡£æ¡åºä¸è¿å°åéçå°æ¹ã
Gccçåºæ¬ç¨æ³åé项
å¨ä½¿ç¨Gccç¼è¯å¨çæ¶åï¼æ们å¿
é¡»ç»åºä¸ç³»åå¿
è¦çè°ç¨åæ°åæ件å称ãGccç¼è¯å¨çè°ç¨åæ°å¤§çº¦æ100å¤ä¸ªï¼å
¶ä¸å¤æ°åæ°æ们å¯è½æ ¹æ¬å°±ç¨ä¸å°ï¼è¿éåªä»ç»å
¶ä¸æåºæ¬ãæ常ç¨çåæ°ã
Gccæåºæ¬çç¨æ³æ¯â¶gcc [options] [filenames]
å
¶ä¸optionså°±æ¯ç¼è¯å¨æéè¦çåæ°ï¼filenamesç»åºç¸å
³çæ件å称ã
-cï¼åªç¼è¯ï¼ä¸è¿æ¥æ为å¯æ§è¡æ件ï¼ç¼è¯å¨åªæ¯ç±è¾å
¥ç.cçæºä»£ç æ件çæ.o为åç¼çç®æ æ件ï¼é常ç¨äºç¼è¯ä¸å
å«ä¸»ç¨åºçåç¨åºæ件ã
-o output_filenameï¼ç¡®å®è¾åºæ件çå称为output_filenameï¼åæ¶è¿ä¸ªå称ä¸è½åæºæ件ååãå¦æä¸ç»åºè¿ä¸ªé项ï¼gccå°±ç»åºé¢è®¾çå¯æ§è¡æ件a.outã
-gï¼äº§ç符å·è°è¯å·¥å
·(GNUçgdb)æå¿
è¦ç符å·èµè®¯ï¼è¦æ³å¯¹æºä»£ç è¿è¡è°è¯ï¼æ们就å¿
é¡»å å
¥è¿ä¸ªé项ã
-Oï¼å¯¹ç¨åºè¿è¡ä¼åç¼è¯ãè¿æ¥ï¼éç¨è¿ä¸ªé项ï¼æ´ä¸ªæºä»£ç ä¼å¨ç¼è¯ãè¿æ¥è¿ç¨ä¸è¿è¡ä¼åå¤çï¼è¿æ ·äº§ççå¯æ§è¡æ件çæ§è¡æçå¯ä»¥æé«ï¼ä½æ¯ï¼ç¼è¯ãè¿æ¥çé度就ç¸åºå°è¦æ
¢ä¸äºã
-O2ï¼æ¯-Oæ´å¥½çä¼åç¼è¯ãè¿æ¥ï¼å½ç¶æ´ä¸ªç¼è¯ãè¿æ¥è¿ç¨ä¼æ´æ
¢ã
-Idirnameï¼å°dirnameææåºçç®å½å å
¥å°ç¨åºå¤´æ件ç®å½å表ä¸ï¼æ¯å¨é¢ç¼è¯è¿ç¨ä¸ä½¿ç¨çåæ°ãCç¨åºä¸ç头æ件å
å«ä¸¤ç§æ
åµâ¶
A)#include
B)#include âmyinc.hâ
å
¶ä¸ï¼A类使ç¨å°æ¬å·(< >)ï¼B类使ç¨åå¼å·(â â)ã对äºAç±»ï¼é¢å¤çç¨åºcppå¨ç³»ç»é¢è®¾å
å«æ件ç®å½(å¦/usr/include)ä¸æ寻ç¸åºçæ件ï¼è对äºBç±»ï¼cppå¨å½åç®å½ä¸æ寻头æ件ï¼è¿ä¸ªé项çä½ç¨æ¯åè¯cppï¼å¦æå¨å½åç®å½ä¸æ²¡ææ¾å°éè¦çæ件ï¼å°±å°æå®çdirnameç®å½ä¸å»å¯»æ¾ãå¨ç¨åºè®¾è®¡ä¸ï¼å¦ææ们éè¦çè¿ç§å
å«æ件åå«åå¸å¨ä¸åçç®å½ä¸ï¼å°±éè¦é个使ç¨-Ié项ç»åºæ索路å¾ã
-Ldirnameï¼å°dirnameææåºçç®å½å å
¥å°ç¨åºå½æ°æ¡£æ¡åºæ件çç®å½å表ä¸ï¼æ¯å¨è¿æ¥è¿ç¨ä¸ä½¿ç¨çåæ°ãå¨é¢è®¾ç¶æä¸ï¼è¿æ¥ç¨åºldå¨ç³»ç»çé¢è®¾è·¯å¾ä¸(å¦/usr/lib)寻æ¾æéè¦çæ¡£æ¡åºæ件ï¼è¿ä¸ªé项åè¯è¿æ¥ç¨åºï¼é¦å
å°-Læå®çç®å½ä¸å»å¯»æ¾ï¼ç¶åå°ç³»ç»é¢è®¾è·¯å¾ä¸å¯»æ¾ï¼å¦æå½æ°åºåæ¾å¨å¤ä¸ªç®å½ä¸ï¼å°±éè¦ä¾æ¬¡ä½¿ç¨è¿ä¸ªé项ï¼ç»åºç¸åºçåæ¾ç®å½ã
-lnameï¼å¨è¿æ¥æ¶ï¼è£
è½½åå为âlibname.aâçå½æ°åºï¼è¯¥å½æ°åºä½äºç³»ç»é¢è®¾çç®å½æè
ç±-Lé项确å®çç®å½ä¸ãä¾å¦ï¼-lm表示è¿æ¥å为âlibm.aâçæ°å¦å½æ°åºã
ä¸é¢æ们ç®è¦ä»ç»äºgccç¼è¯å¨æ常ç¨çåè½å主è¦åæ°é项ï¼æ´ä¸ºè¯¦å°½çèµæå¯ä»¥åçLinuxç³»ç»çèæºå¸®å©ã
åå®æ们æä¸ä¸ªç¨åºå为test.cçCè¯è¨æºä»£ç æ件ï¼è¦çæä¸ä¸ªå¯æ§è¡æ件ï¼æç®åçåæ³å°±æ¯â¶
gcc test.c
è¿æ¶ï¼é¢ç¼è¯ãç¼è¯è¿æ¥ä¸æ¬¡å®æï¼çæä¸ä¸ªç³»ç»é¢è®¾çå为a.outçå¯æ§è¡æ件ï¼å¯¹äºç¨ä¸ºå¤æçæ
åµï¼æ¯å¦æå¤ä¸ªæºä»£ç æ件ãéè¦è¿æ¥æ¡£æ¡åºæè
æå
¶ä»æ¯è¾ç¹å«çè¦æ±ï¼å°±è¦ç»å®éå½çè°ç¨é项åæ°ãåçä¸ä¸ªç®åçä¾åã
æ´ä¸ªæºä»£ç ç¨åºç±ä¸¤ä¸ªæ件testmain.c åtestsub.cç»æï¼ç¨åºä¸ä½¿ç¨äºç³»ç»æä¾çæ°å¦åºï¼åæ¶å¸æç»åºçå¯æ§è¡æ件为testï¼è¿æ¶çç¼è¯å½ä»¤å¯ä»¥æ¯â¶
gcc testmain.c testsub.c â¡lm â¡o test
å
¶ä¸ï¼-lm表示è¿æ¥ç³»ç»çæ°å¦åºlibm.aã
Gccçé误类åå对ç
Gccç¼è¯å¨å¦æåç°æºç¨åºä¸æé误ï¼å°±æ æ³ç»§ç»è¿è¡ï¼ä¹æ æ³çææç»çå¯æ§è¡æ件ã为äºä¾¿äºä¿®æ¹ï¼gccç»åºé误èµè®¯ï¼æ们å¿
须对è¿äºé误èµè®¯é个è¿è¡åæãå¤çï¼å¹¶ä¿®æ¹ç¸åºçè¯è¨ï¼æè½ä¿è¯æºä»£ç çæ£ç¡®ç¼è¯è¿æ¥ãgccç»åºçé误èµè®¯ä¸è¬å¯ä»¥å为å大类ï¼ä¸é¢æ们åå«è®¨è®ºå
¶äº§ççåå å对çã
第ä¸ç±»â¶Cè¯æ³é误
é误èµè®¯â¶æ件source.cä¸ç¬¬nè¡æè¯æ³é误(syntex errror)ãè¿ç§ç±»åçé误ï¼ä¸è¬é½æ¯Cè¯è¨çè¯æ³é误ï¼åºè¯¥ä»ç»æ£æ¥æºä»£ç æ件ä¸ç¬¬nè¡å该è¡ä¹åçç¨åºï¼ææ¶ä¹éè¦å¯¹è¯¥æ件æå
å«ç头æ件è¿è¡æ£æ¥ãæäºæ
åµä¸ï¼ä¸ä¸ªå¾ç®åçè¯æ³é误ï¼gccä¼ç»åºä¸å¤§å é误ï¼æ们æ主è¦çæ¯è¦ä¿ææ¸
éç头èï¼ä¸è¦è¢«å
¶ååï¼å¿
è¦çæ¶åååèä¸ä¸Cè¯è¨çåºæ¬ææã
第äºç±»â¶å¤´æ件é误
é误èµè®¯â¶æ¾ä¸å°å¤´æ件head.h(Can not find include file head.h)ãè¿ç±»é误æ¯æºä»£ç æ件ä¸çå
å«å¤´æ件æé®é¢ï¼å¯è½çåå æ头æ件åé误ãæå®ç头æ件æå¨ç®å½åé误çï¼ä¹å¯è½æ¯é误å°ä½¿ç¨äºåå¼å·åå°æ¬å·ã
第ä¸ç±»â¶æ¡£æ¡åºé误
é误èµè®¯â¶è¿æ¥ç¨åºæ¾ä¸å°æéçå½æ°åºï¼ä¾å¦â¶
ld: -lm: No such file or directory
è¿ç±»é误æ¯ä¸ç®æ æ件ç¸è¿æ¥çå½æ°åºæé误ï¼å¯è½çåå æ¯å½æ°åºåé误ãæå®çå½æ°åºæå¨ç®å½å称é误çï¼æ£æ¥çæ¹æ³æ¯ä½¿ç¨findå½ä»¤å¨å¯è½çç®å½ä¸å¯»æ¾ç¸åºçå½æ°åºåï¼ç¡®å®æ¡£æ¡åºåç®å½çå称并修æ¹ç¨åºä¸åç¼è¯é项ä¸çå称ã
第åç±»â¶æªå®ä¹ç¬¦å·
é误èµè®¯â¶ææªå®ä¹ç符å·(Undefined symbol)ãè¿ç±»é误æ¯å¨è¿æ¥è¿ç¨ä¸åºç°çï¼å¯è½æ两ç§åå â¶ä¸æ¯ä½¿ç¨è
èªå·±å®ä¹çå½æ°æè
å
¨å±åéæå¨æºä»£ç æ件ï¼æ²¡æ被ç¼è¯ãè¿æ¥ï¼æè
å¹²èè¿æ²¡æå®ä¹ï¼è¿éè¦ä½¿ç¨è
æ ¹æ®å®é
æ
åµä¿®æ¹æºç¨åºï¼ç»åºå
¨å±åéæè
å½æ°çå®ä¹ä½ï¼äºæ¯æªå®ä¹ç符å·æ¯ä¸ä¸ªæ åçåºå½æ°ï¼å¨æºç¨åºä¸ä½¿ç¨äºè¯¥åºå½æ°ï¼èè¿æ¥è¿ç¨ä¸è¿æ²¡æç»å®ç¸åºçå½æ°åºçå称ï¼æè
æ¯è¯¥æ¡£æ¡åºçç®å½å称æé®é¢ï¼è¿æ¶éè¦ä½¿ç¨æ¡£æ¡åºç»´æ¤å½ä»¤aræ£æ¥æ们éè¦çåºå½æ°å°åºä½äºåªä¸ä¸ªå½æ°åºä¸ï¼ç¡®å®ä¹åï¼ä¿®æ¹gccè¿æ¥é项ä¸ç-lå-L项ã
æé¤ç¼è¯ãè¿æ¥è¿ç¨ä¸çé误ï¼åºè¯¥è¯´è¿åªæ¯ç¨åºè®¾è®¡ä¸æç®åãæåºæ¬çä¸ä¸ªæ¥éª¤ï¼å¯ä»¥è¯´åªæ¯å¼äºä¸ªå¤´ãè¿ä¸ªè¿ç¨ä¸çé误ï¼åªæ¯æ们å¨ä½¿ç¨Cè¯è¨æè¿°ä¸ä¸ªç®æ³ä¸æ产ççé误ï¼æ¯æ¯è¾å®¹ææé¤çãæ们åä¸ä¸ªç¨åºï¼å°ç¼è¯ãè¿æ¥éè¿ä¸ºæ¢ï¼åºè¯¥è¯´ååå¼å§ï¼ç¨åºå¨è¿è¡è¿ç¨ä¸æåºç°çé®é¢ï¼æ¯ç®æ³è®¾è®¡æé®é¢ï¼è¯´å¾æ´çç¹æ¯å¯¹é®é¢ç认è¯åç解ä¸å¤ï¼è¿éè¦æ´å æ·±å
¥å°æµè¯ãè°è¯åä¿®æ¹ãä¸ä¸ªç¨åºï¼ç¨ä¸ºå¤æçç¨åºï¼å¾å¾è¦ç»è¿å¤æ¬¡çç¼è¯ãè¿æ¥åæµè¯ãä¿®æ¹ãä¸é¢æ们å¦ä¹ çç¨åºç»´æ¤ãè°è¯å·¥å
·åçæ¬ç»´æ¤å°±æ¯å¨ç¨åºè°è¯ãæµè¯è¿ç¨ä¸ä½¿ç¨çï¼ç¨æ¥è§£å³è°æµé¶æ®µæåºç°çé®é¢ãçªä½é¡¶ç«¯
çªä½åºç«¯
温馨提示:答案为网友推荐,仅供参考