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