找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 1564|回復(fù): 0
收起左側(cè)

Linux應(yīng)用編程之GCC編譯器及編譯過(guò)程

[復(fù)制鏈接]
ID:1040469 發(fā)表于 2022-7-26 11:25 | 顯示全部樓層 |閱讀模式

1GCC編譯器簡(jiǎn)介
    GCC編譯器(GNU C Compiler)是GNU開(kāi)發(fā)的一款多平臺(tái)編譯器,根據(jù)名字GCC是一款編譯C程序的編譯器。但隨著該編譯器的擴(kuò)展逐漸支持多平臺(tái)、多語(yǔ)言的編譯套件(GUN Compiler Colloction )。

2什么是編譯器
    編譯器并不是什么高級(jí)的東西,僅僅只是一個(gè)根據(jù)相應(yīng)平臺(tái)要求把用戶(hù)所編寫(xiě)的代碼刪除、修改、翻譯等等處理后生成對(duì)應(yīng)的可執(zhí)行文件的一種軟件程序,其本質(zhì)也是屬于軟件,所以大家可以把編譯器看成一個(gè)翻譯軟件。

3交叉編譯器
    在嵌入式Linux開(kāi)發(fā)過(guò)程中,比如我們開(kāi)發(fā)ARM平臺(tái)上的運(yùn)行程序,一般會(huì)在windows平臺(tái)上進(jìn)行代碼的編譯并生成對(duì)應(yīng)的可執(zhí)行文件燒錄到對(duì)應(yīng)的平臺(tái)中運(yùn)行,然而這個(gè)時(shí)候使用編譯器就是交叉編譯器。

4為何需使用交叉編譯
    嵌入式相比計(jì)算機(jī)最大的區(qū)別個(gè)人覺(jué)得在于資源分配上,相對(duì)而言嵌入式平臺(tái)的運(yùn)行速度、內(nèi)存大小等等都比計(jì)算機(jī)平臺(tái)小很多,既然編譯器也是軟件那就需要占用一定的資源,隨著編譯器的擴(kuò)展需要的硬件平臺(tái)要求也提高了,所以一般的嵌入式平臺(tái)難以滿足編譯要求,不過(guò)對(duì)于資源豐富,性能強(qiáng)勁的平臺(tái)當(dāng)然另當(dāng)別論了。

    所以為了滿足在PC上就可以開(kāi)發(fā)嵌入式軟件就有了前面所提到的交叉編譯環(huán)境,編譯器可以通過(guò)被指定所要運(yùn)行的目標(biāo)平臺(tái)來(lái)對(duì)相應(yīng)程序進(jìn)行編譯生成目標(biāo)平臺(tái)的可執(zhí)行文件,當(dāng)然此時(shí)所生成的可執(zhí)行文件不可在當(dāng)前環(huán)境下運(yùn)行。

5編譯的基本流程
    既然學(xué)習(xí)Linux應(yīng)用編程,那么必定需要將平時(shí)所編寫(xiě)的程序通過(guò)編譯器最終生成可執(zhí)行文件,下面大致看看GCC如何編譯程序的:
編譯過(guò)程解析

1)預(yù)處理階段:主要對(duì)源文件進(jìn)行文件包含和預(yù)處理語(yǔ)句的分析處理;
2)編譯階段:把預(yù)處理完的.i文件進(jìn)行一系列詞法分析、語(yǔ)法分析、語(yǔ)義分析以及優(yōu)化后生成相應(yīng)的匯編代碼文件;
3)匯編階段:使用匯編器將匯編代碼轉(zhuǎn)換成機(jī)器可以執(zhí)行的指令并生成.o文件;
4)鏈接階段:使用鏈接器把所有的目標(biāo)文件和庫(kù)文件鏈接起來(lái)放在合適的位置生成.out可執(zhí)行文件。

6簡(jiǎn)單體驗(yàn)一下GCC
    下面小哥就簡(jiǎn)單的在ubuntu下面寫(xiě)了一個(gè).c程序并使用gcc編譯運(yùn)行,其實(shí)與我們平時(shí)在windows環(huán)境中編譯運(yùn)行類(lèi)似,僅僅只是把windows點(diǎn)擊按鈕換成了對(duì)應(yīng)的命令行罷了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表