柚子快報(bào)激活碼778899分享:【linux】編譯器使用
柚子快報(bào)激活碼778899分享:【linux】編譯器使用
目錄
1. gcc ,g++ 編譯器使用
a. 有關(guān)gcc的指令(g++同理)
2. .o 文件和庫的鏈接方式
a. 鏈接方式
b. 動(dòng)態(tài)庫 和 靜態(tài)庫 優(yōu)缺點(diǎn)對(duì)比
c. debug 版本 和 release 版本
1. gcc ,g++ 編譯器使用
a. 有關(guān)gcc的指令(g++同理)
注意:
linux下自帶gcc編譯器,如果要安裝g++編譯器;
sudo yum install -y gcc-g++ (普通用戶)
gcc + 文件名
得到可執(zhí)行文件
gcc + 文件名 + -o + 自定義文件名
得到的可執(zhí)行文件可以自己命名
gcc + E + 文件名 + -o + 自定義文件名 (一般以 .i 結(jié)尾)
得到預(yù)處理后的文件可以自己命名
注意:
-E 告訴編譯器,從現(xiàn)在階段開始執(zhí)行完預(yù)處理階段就可以停下來了
gcc -S + 文件名 + -o + 自定義文件名 (一般以 .s 結(jié)尾)
得到編譯后的文件可以自己命名
注意:
-S 告訴編譯器,從現(xiàn)在階段開始執(zhí)行完編譯階段就可以停下來了(得到的是匯編代碼)
gcc -c + 文件名 + -o + 自定義文件名 (一般以 .o 結(jié)尾)
得到匯編后的文件可以自己命名(得到的是二進(jìn)制代碼)
注意:
得到的文件(可重定位目標(biāo)二進(jìn)制文件)不可以直接執(zhí)行(缺少鏈接這一步)鏈接鏈接的是庫文件 (Linux下:.so(動(dòng)態(tài)庫) .a(靜態(tài)庫),windows下:.dll(動(dòng)態(tài)庫),.lib(靜態(tài)庫))linux系統(tǒng)下,庫有自己的命名規(guī)則:libname.so (紅色標(biāo)明的位置才是庫的名字)編譯型語言,所謂的安裝包,是安裝了 頭文件 + 庫文件linux系統(tǒng)下,默認(rèn)只安裝了動(dòng)態(tài)庫,沒有安裝靜態(tài)庫函數(shù)的實(shí)現(xiàn)就是調(diào)用了庫文件,庫文件就是源文件(.c)經(jīng)過一定翻譯后,形成的一個(gè)文件(可以打包多個(gè)源文件,也可以達(dá)到隱藏源文件的效果)頭文件提供方法的聲明,庫文件提供方法的實(shí)現(xiàn)頭文件所處位置:/usr/include
2. .o 文件和庫的鏈接方式
a. 鏈接方式
動(dòng)態(tài)鏈接
動(dòng)態(tài)庫不能缺失,一旦對(duì)應(yīng)的動(dòng)態(tài)庫缺失,影響的不止一個(gè)程序
靜態(tài)鏈接
在編譯器使用的時(shí)候,靜態(tài)鏈接時(shí),會(huì)將自己的函數(shù)拷貝到目標(biāo)文件中,如果靜態(tài)庫缺失了,不會(huì)影響目標(biāo)程序
注意:
在 Linux系統(tǒng)下,默認(rèn)采用的鏈接是動(dòng)態(tài)鏈接(需要提供動(dòng)態(tài)庫)動(dòng)態(tài)庫只能使用動(dòng)態(tài)鏈接,靜態(tài)庫只能使用靜態(tài)鏈接
-static 選項(xiàng)
采用靜態(tài)鏈接(需要提供靜態(tài)庫)
注意:
安裝 C語言 靜態(tài)庫(普通用戶):
sudo yum install -y glibc-static
安裝 C++ 靜態(tài)庫(普通用戶)
sudo yum install -y libstdc++-static
如果只有動(dòng)態(tài)庫,沒有靜態(tài)庫,-static 是不行的如果沒有動(dòng)態(tài)庫,只有靜態(tài)庫,那么只能用靜態(tài)庫 (本來編譯器默認(rèn)優(yōu)先使用動(dòng)態(tài)庫,-static 是改變優(yōu)先級(jí),將所有的鏈接要求都改成靜態(tài)鏈接,沒有就會(huì)報(bào)錯(cuò) )
b. 動(dòng)態(tài)庫 和 靜態(tài)庫 優(yōu)缺點(diǎn)對(duì)比
動(dòng)態(tài)庫因?yàn)槭枪蚕韼?,可以?jié)約資源(磁盤資源,內(nèi)存資源,網(wǎng)絡(luò)資源等)【優(yōu)點(diǎn)】動(dòng)態(tài)庫一旦缺失,目標(biāo)程序很可能不能執(zhí)行 【缺點(diǎn)】靜態(tài)庫依賴小,缺失靜態(tài)庫不會(huì)對(duì)目標(biāo)程序造成什么影響 【優(yōu)點(diǎn)】靜態(tài)庫體積大,資源消耗大 【缺點(diǎn)】
c. debug 版本 和 release 版本
注意:
gcc 默認(rèn)形成的可執(zhí)行程序是以 release 版本發(fā)布出去的debug 版本 會(huì)比 release 版本 多加 debug 信息 ,所以體積上也會(huì)更大
gcc + 文件名 + -o + 目標(biāo)文件名 + -g
形成的可執(zhí)行文件是 debug版本 的
柚子快報(bào)激活碼778899分享:【linux】編譯器使用
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。