日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
為什么Golang開發(fā)的軟件單文件直接丟到各種Linux系統(tǒng)就能運(yùn)行?

提到跨平臺(tái)開發(fā),就首先想到C語(yǔ)言,準(zhǔn)確的說應(yīng)該叫ANSI C。

成都創(chuàng)新互聯(lián)長(zhǎng)期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為邯鄲企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都做網(wǎng)站,邯鄲網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

ANSI C是由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)及國(guó)際標(biāo)準(zhǔn)化組織(ISO)推出的關(guān)于C語(yǔ)言的標(biāo)準(zhǔn)。ANSI C 主要標(biāo)準(zhǔn)化了現(xiàn)存的實(shí)現(xiàn), 同時(shí)增加了一些來自 C++ 的內(nèi)容 (主要是函數(shù)原型) 并支持多國(guó)字符集 (包括備受爭(zhēng)議的三字符序列)。ANSI C 標(biāo)準(zhǔn)同時(shí)規(guī)定了 C 運(yùn)行期庫(kù)例程的標(biāo)準(zhǔn)。一些開源項(xiàng)目根據(jù)ANSI C標(biāo)準(zhǔn)進(jìn)行開發(fā)后,可移植行就非常好。

但無(wú)奈,隨著新指令集的CPU不斷出現(xiàn),如果開發(fā)者自己要從ANSI C方式去編碼,實(shí)現(xiàn)減少由于不同軟硬件架構(gòu)的差異對(duì)上層應(yīng)用的影響,那屬實(shí)要做很大的基礎(chǔ)工作。

所以當(dāng)更加專業(yè)的語(yǔ)言Go出來后,由于設(shè)計(jì)者基于既往設(shè)計(jì)C語(yǔ)言的成功經(jīng)驗(yàn)去粗取精,又結(jié)合近二三十年來的CPU架構(gòu)和操作系統(tǒng)、云計(jì)算的新趨勢(shì),而造出了Go這樣的多平臺(tái)多CPU通吃的語(yǔ)言。正是這種定位,所以Go語(yǔ)言在可執(zhí)行文件的鏈接方面就與眾不同。

比如當(dāng)小白不小心把linux系統(tǒng)的底層加載程序 ld-linux.so 文件刪掉了,

準(zhǔn)備跑路吧~~

因?yàn)榇撕笙到y(tǒng)內(nèi)所有 C/C++/Python/Nodejs/PHP/Java等語(yǔ)言開發(fā)編譯的可執(zhí)行文件,全都啟動(dòng)失敗,出現(xiàn)莫名其妙的錯(cuò)誤,比如cp命令是存在于 /usr/bin/cp 路徑的文件,但此時(shí)調(diào)用cp,報(bào)錯(cuò)No such file or directry 。

這是因?yàn)橐陨螾ython等所列的語(yǔ)言,本質(zhì)上都是C語(yǔ)言開發(fā)的,它們的可執(zhí)行文件的底層鏈接的系統(tǒng)動(dòng)態(tài)庫(kù),要想運(yùn)行都先依賴于 ld-linux.so 幫它們處理好ELF的二進(jìn)制可執(zhí)行文件、鏈接庫(kù)的代碼段落、數(shù)據(jù)段等內(nèi)容加載到內(nèi)存,然后CPU根據(jù)二進(jìn)制指令執(zhí)行代碼邏輯,處理數(shù)據(jù),完成計(jì)算任務(wù)。而這個(gè)底層的 ld-linux.so 動(dòng)態(tài)庫(kù)文件一旦自身不保,那么,其他依賴的軟件當(dāng)然全部異常。

而我們之前編譯的Go的main函數(shù)測(cè)試二進(jìn)制文件main。仍然能啟動(dòng)。

那么Go語(yǔ)言是如何獨(dú)步江湖的呢?可以推斷,Go的鏈接方式不使用ld-linux.so。

Go的編譯器生成的靜態(tài)鏈接的GO應(yīng)用二進(jìn)制文件,已包含了可供完整載入內(nèi)存和需要的所有指令。既然這樣,不管是Linux發(fā)行版A還是B系統(tǒng)自帶的glibC 的版本是否過時(shí),是否過新,跟GO能否正常運(yùn)行關(guān)系不大。GO軟件運(yùn)行所需的都已經(jīng)自給自足了。也因此Go可以帶著它的干糧,不管丟到哪里就可以在那里運(yùn)行。

當(dāng)然,這離不開Go語(yǔ)言開發(fā)團(tuán)隊(duì)背后做了很多底層適配兼容,幫應(yīng)用開發(fā)者省去了這份操心。也讓這門語(yǔ)言兌現(xiàn)了它所吹過的牛。

下圖為Golang 最新版1.21.5所支持的CPU架構(gòu)、操作系統(tǒng)信息,實(shí)際Go目前能支持的已經(jīng)超過這些平臺(tái)范圍。部分小眾的系統(tǒng)架構(gòu)也支持,圖中未列出。


本文題目:為什么Golang開發(fā)的軟件單文件直接丟到各種Linux系統(tǒng)就能運(yùn)行?
瀏覽路徑:http://m.5511xx.com/article/codpose.html