資源描述:
《LinuxC編程基礎(chǔ)-G》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第二章LinuxC編程基礎(chǔ)--GCC主要內(nèi)容gcc簡(jiǎn)介利用gcc編譯c程序利用make工具簡(jiǎn)化編譯過(guò)程調(diào)試開(kāi)發(fā)工具環(huán)境開(kāi)發(fā)工具:編輯工具、編譯工具和調(diào)試工具,甚至配置工具和項(xiàng)目管理工具。開(kāi)發(fā)環(huán)境:(1)基于文本的:vim+gcc+gdb+make(2)集成開(kāi)發(fā)平臺(tái):Eclipse+CDT、基于文本的開(kāi)發(fā)平臺(tái)編輯工具:vim,emacs。編譯工具:gcc,要使用指令完成編譯,比如:gcc–ohellohello.c調(diào)試工具:gdb。項(xiàng)目管理工具:make,編寫(xiě)makefile文檔來(lái)完成相關(guān)的一系列g(shù)cc指令。gcc簡(jiǎn)介名稱(chēng):
2、GNUprojectCandC++CompilerGNUCompilerCollectiongcc是一個(gè)全功能的ANSI?C兼容編譯器,它是所有UNIX系統(tǒng)可用的C編譯器。gcc是可以在多種硬體平臺(tái)上編譯出可執(zhí)行程序的超級(jí)編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。gcc簡(jiǎn)介對(duì)C/C++編譯的控制預(yù)處理:對(duì)源代碼文件中的文件包含(include)、預(yù)編譯語(yǔ)句(如宏定義define等)進(jìn)行分析。編譯:就是把C/C++代碼“翻譯”成匯編代碼。匯編:將第二步輸出的匯編代碼翻譯成符合一定格式的機(jī)器代碼,生成以.
3、s為后綴的目標(biāo)文件。鏈接:將上步生成的目標(biāo)文件和系統(tǒng)庫(kù)的目標(biāo)文件和庫(kù)文件鏈接起來(lái),最終生成了可以在特定平臺(tái)運(yùn)行的可執(zhí)行文件。編譯過(guò)程的四個(gè)階段:預(yù)處理鏈接編譯組譯源程序(*.c)可執(zhí)行文件預(yù)處理器編譯器組譯器連接器gcc的使用基本使用格式$gcc[選項(xiàng)][文件名]例://text.c#includevoidmain(){printf(“HelloWorld!”);}$gcctest.c$./a.outHelloWorld!或$gcc-otesttest.c$./testHelloWorld!常用選項(xiàng)及
4、含義gcc常用選項(xiàng)選項(xiàng)含義-ofile將經(jīng)過(guò)gcc處理過(guò)的結(jié)果存為文件file,這個(gè)結(jié)果文件可能是預(yù)處理文件、匯編文件、目標(biāo)文件或者最終的可執(zhí)行文件。假設(shè)被處理的源文件為source.suffix,如果這個(gè)選項(xiàng)被省略了,那么生成的可執(zhí)行文件默認(rèn)名稱(chēng)為a.out;目標(biāo)文件默認(rèn)名為source.o;匯編文件默認(rèn)名為source.s;生成的預(yù)處理文件則發(fā)送到標(biāo)準(zhǔn)輸出設(shè)備。gcc的常用選項(xiàng)-c只編譯,不鏈接成為可執(zhí)行文件,編譯器只是由輸入的.c等源代碼文件生成.o為后綴的目標(biāo)文件。在對(duì)源文件進(jìn)行查錯(cuò)時(shí),或只需產(chǎn)生目標(biāo)文件時(shí)可以使用
5、該選項(xiàng)。-g[gdb]在可執(zhí)行文件中加入調(diào)試信息,方便進(jìn)行程序的調(diào)試。如果使用中括號(hào)中的選項(xiàng),表示加入gdb擴(kuò)展的調(diào)試信息,方便使用gdb來(lái)進(jìn)行調(diào)試-O[0、1、2、3]對(duì)生成的代碼使用優(yōu)化,中括號(hào)中的部分為優(yōu)化級(jí)別,缺省的情況為2級(jí)優(yōu)化,0為不進(jìn)行優(yōu)化。注意,采用更高級(jí)的優(yōu)化并不一定得到效率更高的代碼。gcc的常用選項(xiàng)-Idirname將dirname所指出的目錄加入到程序頭文件目錄列表中,是在預(yù)編譯過(guò)程中使用的參數(shù)。-Ldirname將dirname所指出的目錄加入到程序函數(shù)檔案庫(kù)文件的目錄列表中,是在連接過(guò)程中使用的
6、參數(shù)。在預(yù)設(shè)狀態(tài)下,連接程序ld在系統(tǒng)的預(yù)設(shè)路徑中(如/usr/lib)尋找所需要的檔案庫(kù)文件,這個(gè)選項(xiàng)告訴連接程序,首先到-L指定的目錄中去尋找,然后到系統(tǒng)預(yù)設(shè)路徑中尋找,如果函數(shù)庫(kù)存放在多個(gè)目錄下,就需要依次使用這個(gè)選項(xiàng),給出相應(yīng)的存放目錄。-lname在連接時(shí),裝載名字為“l(fā)ibname.a”的函數(shù)庫(kù),該函數(shù)庫(kù)位于系統(tǒng)預(yù)設(shè)的目錄或者由-L選項(xiàng)確定的目錄下。例如,-lm表示連接名為“l(fā)ibm.a”的數(shù)學(xué)函數(shù)庫(kù)。gcc的常用選項(xiàng)-w禁止所有警告-Wwarning允許產(chǎn)生warning類(lèi)型的警告,warning可以是:ma
7、in、unused等很多取值,最常用是-Wall,表示產(chǎn)生所有警告。如果warning取值為error,其含義是將所有警告作為錯(cuò)誤(error),即出現(xiàn)警告就停止編譯。-pedantic[-errors]表示gcc只發(fā)出ANSI/ISOC標(biāo)準(zhǔn)列出的所有警告,-pedantic–errors僅僅針對(duì)錯(cuò)誤。-ansi支持ANSI/ISOC的標(biāo)準(zhǔn)語(yǔ)法,取消GNU的語(yǔ)法中與該標(biāo)準(zhǔn)有沖突的部分,但并不保證生成與ANSI兼容代碼。-Wall:允許所有有用的警告(建議總是使用該選項(xiàng))/*bad.c*/#includei
8、ntmain(intargc,char**argv){printf(“Twoplustwois%f”,4);return0;}例1:$gccbad.c–obad例2:$gcc–Wallbad.c–obad13例1:-o:定義輸出文件例:編譯多個(gè)源文件$gcc-Wallmain.chello.c-oh