溫馨提示×

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

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

linux交叉編譯的作用是什么

發(fā)布時(shí)間:2022-08-26 11:19:46 來(lái)源:億速云 閱讀:233 作者:iii 欄目:建站服務(wù)器

本篇內(nèi)容主要講解“l(fā)inux交叉編譯的作用是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“l(fā)inux交叉編譯的作用是什么”吧!

在linux中,交叉編譯是一種計(jì)算機(jī)環(huán)境中運(yùn)行的編譯程序,能編譯出另外一種環(huán)境下運(yùn)行的代碼;交叉編譯出來(lái)的程序,所要運(yùn)行的目標(biāo)環(huán)境中,各種資源,都相對(duì)有限,所以很難進(jìn)行直接的本地編譯,有時(shí)是因?yàn)槟康钠脚_(tái)上不允許或不能夠安裝我們所需要的編譯器,而我們又需要這個(gè)編譯器的某些特征,所以需要使用交叉編譯。

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

linux交叉編譯有什么用

什么是交叉編譯

本地編譯

解釋什么是交叉編譯之前,先要明白一個(gè)概念:本地編譯

我們之前常見(jiàn)的軟件開(kāi)發(fā),都是屬于本地編譯:在當(dāng)前的PC下,x86的CPU下,直接編譯出來(lái)程序,可以運(yùn)行的程序(或者庫(kù)文件),其可以直接在當(dāng)前的環(huán)境,即x86的CPU下,當(dāng)前電腦中,運(yùn)行。

此時(shí)的編譯,可以叫做:本地編譯,即在當(dāng)前目標(biāo)平臺(tái)下,編譯出來(lái)的程序,也只是放到當(dāng)前平臺(tái)下,就可以運(yùn)行的。

交叉編譯

交叉編譯,是一個(gè)和,本地編譯,相對(duì)應(yīng)的概念。

而所謂的,交叉編譯,就是:在一種平臺(tái)上編譯,編譯出來(lái)的程序,是放到別的平臺(tái)上運(yùn)行即編譯的環(huán)境,和運(yùn)行的環(huán)境不一樣,屬于交叉的,此所謂 cross。

交叉編譯,這個(gè)概念,主要和嵌入式開(kāi)發(fā)有關(guān)。

例 如.:在x86平臺(tái)上編譯,在ARM平臺(tái)上運(yùn)行。

一種最常見(jiàn)的例子就是:

在進(jìn)行嵌入式開(kāi)發(fā)時(shí)手上有個(gè)嵌入式開(kāi)發(fā)板,CPU是arm的然后在x86的平臺(tái)下開(kāi)發(fā),比如Ubuntu的Linux,或者是Win 10然后就需要:

在x86的平臺(tái)上,(用交叉編譯器)去編譯你寫(xiě)好的程序代碼

編譯生成的(可執(zhí)行的)程序,是放到目標(biāo)開(kāi)發(fā)板,arm的CPU上運(yùn)行的

此所謂:在x86平臺(tái)上編譯,在ARM平臺(tái)上運(yùn)行。

交叉編譯,英文常寫(xiě)作cross compile,也有其他寫(xiě)法:crosscompile, cross compiling 等。

為何要有交叉編譯

之所以要有交叉編譯,主要原因是:嵌入式系統(tǒng)中的資源太少

具體的解釋就是:交叉編譯出來(lái)的程序,所要運(yùn)行的目標(biāo)環(huán)境中,各種資源,都相對(duì)有限,所以很難進(jìn)行直接的本地編譯。

最常見(jiàn)的情況是:在進(jìn)行嵌入式開(kāi)發(fā)時(shí),目標(biāo)平臺(tái),即嵌入式開(kāi)發(fā)板,比如是最大主頻200MHz的ARM的CPU,加上32M的RAM,加上1G的Nand Flash等等。在如此相對(duì)比較緊張的硬件資源的前提下,在已經(jīng)運(yùn)行了嵌入式Linux的前提下,是沒(méi)法很方便的直接在嵌入式Linux下,去本地編譯,去在ARM的CPU下,編譯出來(lái),供ARM的CPU可以運(yùn)行的程序的。因?yàn)榫幾g,開(kāi)發(fā),都需要相對(duì)比較多的CPU,內(nèi)存,硬盤(pán)等資源,而嵌入式開(kāi)發(fā)上的那點(diǎn)資源,只夠嵌入式(Linux)系統(tǒng)運(yùn)行的,沒(méi)太多剩余的資源,供你本地編譯。

BusyBox中包含make等和編譯開(kāi)發(fā)相關(guān)的工具

對(duì)應(yīng)的,等你后期熟悉了嵌入式開(kāi)發(fā),熟悉了Busybox后,比如在Buildroot中去配置Busybox,或者單獨(dú)交叉編譯BusyBox時(shí):

【記錄】Ubuntu下為QEMU的arm平臺(tái)交叉編譯BusyBox

就會(huì)看到,后來(lái)的BusyBox,功能增加后,也已經(jīng)包含了一些,和編譯開(kāi)發(fā)相關(guān)的工具,比如make等等

而這些工具,本來(lái)的話(huà),只是,放在PC端使用,即在x86平臺(tái)下做開(kāi)發(fā)的時(shí)候,在交叉編譯的時(shí)候,才用到的工具,現(xiàn)在,也在(BusyBox的)嵌入式環(huán)境中,支持了。

此時(shí),如果,你在BusyBox中把相關(guān)的開(kāi)發(fā)工具都選上的話(huà),

再加上,你的目標(biāo)開(kāi)發(fā)板的硬件配置足夠強(qiáng)大的話(huà),比如CPU都是以GHz為單位,等等

加上相關(guān)的開(kāi)發(fā)的庫(kù)和工具都很全的話(huà)

實(shí)際上,至少理論上,也是可以在你的嵌入式Linux中,進(jìn)行,有限的,甚至是很大程度上的,本地開(kāi)發(fā)即,直接在ARM的開(kāi)發(fā)板上,嵌入式Linux中,直接進(jìn)行嵌入式開(kāi)發(fā),進(jìn)行針對(duì)ARM的本地編譯

比如,編譯出一個(gè)helloworld,估計(jì)還是可以的。

這樣,就不存在,或者說(shuō),避免了,此處所說(shuō)的,交叉編譯,而變成了本地編譯

就相當(dāng)于,之前在x86的PC端的,編譯程序放在x86的CPU上運(yùn)行的本地編譯,

在ARM的CPU,嵌入式Linux中,也實(shí)現(xiàn)了

但是很明顯,對(duì)于更加復(fù)雜的程序或者庫(kù),在ARM開(kāi)發(fā)板上直接編譯的可行性和效率,相對(duì)就很低

而且如果是本身折騰Uboot等東西,本身目標(biāo)運(yùn)行環(huán)境,就沒(méi)有完整的(嵌入式Linux)系統(tǒng)的話(huà),那么就更加沒(méi)法在目標(biāo)平臺(tái)實(shí)現(xiàn)本地編譯了。

則還是只能進(jìn)行,此處所說(shuō)的,交叉編譯

到此,相信大家對(duì)“l(fā)inux交叉編譯的作用是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(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