1.gcc/g++編譯器的安裝
使用yum進(jìn)行安裝需要進(jìn)入root用戶
gcc yum install gcc
g++ yum install gcc-c++
2.gcc/g++的作用
將c/c++源代碼編譯成機(jī)器可識(shí)別的代碼(指令)
3.編譯過程
預(yù)處理 通過預(yù)處理指令所包含的文件內(nèi)容插入程序中(展開源文件的所有代碼)
gcc -E test.c -o test.i 產(chǎn)生一個(gè)預(yù)處理后的文件( .i文件 )
編譯 語法語義糾錯(cuò),調(diào)用匯編程序生成成匯編代碼
編譯時(shí)指定源程序,不用任何選項(xiàng),會(huì)默認(rèn)生成一個(gè)a.out文件
gcc -S test.i -o test.s 產(chǎn)生一個(gè)匯編程序文件( .s文件 )
匯編 將匯編代碼翻譯成機(jī)器所能識(shí)別的二進(jìn)制指令
gcc -c test.s -o test.o 產(chǎn)生一個(gè)目標(biāo)文件( .o文件)
鏈接 鏈接庫(kù),將所有代碼合到一起生成可執(zhí)行文件
gcc test.o -o test 產(chǎn)生一個(gè)可執(zhí)行文件
鏈接分為靜態(tài)鏈接和動(dòng)態(tài)鏈接:
靜態(tài)鏈接:需要在鏈接后添加" -static ",將所有的代碼包括標(biāo)準(zhǔn)庫(kù)的實(shí)現(xiàn)全部鏈接到可執(zhí)行文件中;
缺點(diǎn):冗余度大,編譯出來的文件比較大
動(dòng)態(tài)鏈接:在可執(zhí)行文件中只保存所需使用的函數(shù)的符號(hào),符號(hào)表;
優(yōu)點(diǎn):可執(zhí)行文件小,各個(gè)模塊處于解耦狀態(tài),且代碼復(fù)用性高
gcc默認(rèn)的鏈接方式為動(dòng)態(tài)鏈接
4.gcc/g++的區(qū)別與聯(lián)系
1>對(duì)于*.c文件,gcc會(huì)將它當(dāng)成c程序,而g++會(huì)將它當(dāng)成cpp程序
2>對(duì)于*.cpp文件,gcc與g++都會(huì)當(dāng)它為cpp程序
3>cpp編譯階段,g++會(huì)調(diào)用gcc
4>cpp鏈接階段,通常會(huì)用g++來完成,因?yàn)間cc命令不能自動(dòng)與cpp程序使用的庫(kù)鏈接
5.gcc編譯器常用選項(xiàng)
-c 只生成目標(biāo)文件(*.o文件),不鏈接
-E 只進(jìn)行預(yù)處理,不編譯,生成預(yù)處理后的(*.i)文件
-S 生成匯編文件(*.s)文件
-o 指定輸出的可執(zhí)行文件名稱
-g 在編譯過程中產(chǎn)生調(diào)試信息
-w 禁止警告,有時(shí)會(huì)隱藏程序中的錯(cuò)誤
-W 給出額外更詳細(xì)的警告
-Wall 給出所有有用的警告信息,有利于排查問題
聯(lián)系客服