溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux下生成s文件的過程稱為什么

發(fā)布時(shí)間:2022-06-17 13:56:43 來源:億速云 閱讀:185 作者:iii 欄目:建站服務(wù)器

這篇文章主要介紹“l(fā)inux下生成s文件的過程稱為什么”,在日常操作中,相信很多人在linux下生成s文件的過程稱為什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”linux下生成s文件的過程稱為什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

linux下生成s文件的過程叫“編譯”。linux中的編譯器gcc會(huì)把預(yù)處理后的“.i”文件進(jìn)行語(yǔ)法分析、語(yǔ)義分析以及優(yōu)化后生成匯編代碼文件(“.s”文件),執(zhí)行語(yǔ)法為“gcc -S 文件名.i -o 文件名.s”;接著匯編器會(huì)把匯編代碼文件轉(zhuǎn)換成中間目標(biāo)文件;最后鏈接器ld會(huì)把目標(biāo)文件與所需要的靜態(tài)鏈接庫(kù)、動(dòng)態(tài)鏈接庫(kù)鏈接起來成為可執(zhí)行的文件。

本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。

linux下編譯c文件成為可執(zhí)行文件的過程

使用gcc把C文件編譯成可執(zhí)行文件可分為四步:預(yù)編譯、編譯、匯編、連接。

1、預(yù)編譯(生成.i文件)

預(yù)編譯器cpp把源文件和相關(guān)的頭文件(如實(shí)例代碼中的頭文件stdio.h)預(yù)編譯成一個(gè).i的文件。

執(zhí)行的命令:gcc -E 文件名.c -o 文件名.i

預(yù)編譯的作用:

a、處理所有的“#include”預(yù)編譯指令

b、處理所有的"#define"指令,將代碼中所有的"#define"刪除,并展開所有的宏定義

c、處理所有的條件預(yù)編譯指令,如#if #elif #else #ifdef #ifnodef #endif等

d、刪除所有的注釋

e、添加行號(hào)和文件名標(biāo)識(shí),以便產(chǎn)生錯(cuò)誤時(shí)給出提示信息

2、編譯(生成.s文件)

編譯器gcc把預(yù)處理后的文件進(jìn)行語(yǔ)法分析、語(yǔ)義分析以及優(yōu)化后生成匯編代碼文件。

執(zhí)行的命令:gcc -S 文件名.i -o 文件名.s

3、匯編(生成.o文件)

匯編器把匯編代碼文件轉(zhuǎn)換成中間目標(biāo)文件

執(zhí)行的命令:gcc -c 文件名.s -o 文件名.o  (注意:這里是小寫的-c,而不是大寫的-C,本人在此處踩坑,出現(xiàn)異常)

4、鏈接(生成可執(zhí)行文件)

鏈接器ld把目標(biāo)文件與所需要的所有的附加的目標(biāo)文件(如靜態(tài)鏈接庫(kù)、動(dòng)態(tài)鏈接庫(kù))鏈接起來成為可執(zhí)行的文件

執(zhí)行的命令:gcc 文件名.o -o 文件名

linux下編譯c文件成為可執(zhí)行文件的實(shí)例

1、準(zhǔn)備C文件

在命令行模式下輸入:vim hello.c

進(jìn)入編輯模式,輸入以下代碼:

#include<stdio.h>

int main(void){
    printf("Hello World!\n");
    return 0;
}

首先點(diǎn)擊ESC鍵退出編輯模式,然后輸入:wq(注意輸入的時(shí)候有冒號(hào)哦)回到命令行。

2、編譯

編譯C文件成可執(zhí)行文件

執(zhí)行的命令:gcc hello.c -o hello

輸入ls命令,能看到當(dāng)前文件夾下多了一個(gè)文件:hello

3、執(zhí)行

執(zhí)行:./hello

可得輸出hello World!

linux下生成s文件的過程稱為什么

到此,關(guān)于“l(fā)inux下生成s文件的過程稱為什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI