如何在國產龍芯架構平台上運行c/c++、java、nodejs等編程語言


高能預警:本文內容過於硬核,涉及編譯器原理、cpu指令集、機器碼、編程語言原理、跨平台原理等計算機專業基礎知識,建議具有c、c++、java、nodejs等多種編程語言開發能力,且實戰經驗豐富的資深開發者閱讀。

背景

全面的國產化即將來臨之時,不僅是操作系統,cpu也會使用國產化芯片作為替換,那么龍芯cpu作為國產cpu龍頭,當仁不讓,成為國產化替換的首選,硬件條件已經滿足了,作為軟件開發者,基於龍芯架構的軟件當然也要適配起來了。

支持龍芯的操作系統

由於龍芯目前只支持某些特定的linux發行版,有深度OS、統信UOS、中標麒麟、麒麟、普華、新支點操作系統。

截止2021年6月1日,支持的操作系統版本如有新的操作系統支持,請參照龍芯官網說明。

龍芯架構簡介

龍芯架構如果在編譯器層面不做適配,編程語言(靜態編譯型和動態編程語言)是不能運行的,為什么運行不了呢?因為cpu指令集不同,目前市面上的編程語言大部分都是以支持intel/amd為首的x86或者x86_64指令集,和支持蘋果安卓等移動端使用的arm精簡指令集為主,龍芯使用開源的mips指令集,與上面都不同,除非編程語言的編譯器能夠支持mips指令集編譯,否則市面上所有編程語言都不支持在龍芯架構平台上運行。

對於編譯器可以說大部分開發者可能跟博主一樣,七竅通了六竅。但是這不要緊,並不影響我們理解它的原理。

編程語言是如何運行在特定架構的平台上的呢? 答案是:編譯器。

編譯器原理簡述

(過於硬核,可以選擇跳過到后面的龍芯運行java)

有一點大家知道的是,我們編寫的代碼只是為了方便我們人類去閱讀、編寫的,機器是沒辦法運行的,這時候根據編程語言的不同,就需要編譯器將靜態編譯型語言翻譯成機器碼。

靜態編譯型語言如何編譯到特定架構平台

編譯器把我們編寫的代碼翻譯成特定架構平台的機器碼,比如使用gcc,cmake編譯c/c++代碼的時候需要選擇特定的架構平台。
再比如,rust、golang等語言則必須先用c++編譯器編譯出支持龍芯的golang、rust編譯器,才能自舉,否則無法編譯運行。

這里我們以c/c++為例,來簡單介紹一下如何編譯到龍芯平台。

如何編譯c/c++代碼到龍芯架構平台

對於使用了上述操作系統的小伙伴們,可以直接跟其他linux一樣,cmake,./configure就可以了,沒有一點變化,所以我們直接跳過,這里講講使用其他操作系統的情況,就是只要在編譯的時候加上兩個參數(架構和cpu)即可

./configure 
--arch=mips 
--cpu=loongson3a

ffmpeg和opencv都參照這種方式編譯即可。

注意:GCC4.6以后才默認支持龍芯3A架構,所以請GCC版本較低的自行升級到最新版本即可。

動態語言如何在特定架構平台運行

動態語言與靜態編譯型語言不同在於它們在每種架構平台都有一套運行時(以java和nodejs舉例:jvm,v8)。比如java和nodejs,java在不同的操作系統和架構上都提供了不同的jdk運行時,而js則依靠不同架構平台的v8虛擬機運行時才能運行,而jdk和nodejs運行時都依靠靜態編譯型語言編譯成特定架構平台機器碼才能運行,所以不管是動態編譯還是動態腳本都需要依賴通過特定架構平台的靜態編譯后的運行時(運行時:jvm,v8等) 。

那么到這里,我們已經知道要解決在龍芯架構平台上運行java或者nodejs這種動態編譯型語言該如何做了,jdk和nodejs都是使用c/c++編寫的,那么我們就可以編譯jdk和nodejs(含v8引擎)的源碼(c/c++)到龍芯指令集就可以了

可喜的是龍芯平台幫我做了這件事,目前龍芯平台已經可以支持java。

如何在龍芯上運行Java

龍芯很早就開始參貢獻openjdk項目了,因此,國產龍芯平台自己也維護了一個openjdk版本分支:http://www.loongnix.org/index.php/Java
龍芯平台上必須使用該版本jdk才可以運行java項目,這樣就不需要我們自己去編譯openjdk的源碼到龍芯平台了。
因為龍芯平台單獨維護了jdk版本,所以使用java的小伙伴們只要使用龍芯的openjdk版本就可以把java項目很平滑的部署到龍芯平台上,而不需要擔心兼容性的問題,真正讓java實現了一次編寫,到處運行。

如何在龍芯平台上運行nodejs

nodejs是一個基於 Chrome V8 引擎的 JavaScript 運行環境;

  跟Java相同的是,龍芯平台已適配了loongnix-Server以及Debian10對應的版本:nodejs-v12.16.3,並將持續維護。所以nodejs的小伙伴們可以安心了,使用nodejs開發的程序可以平滑的過渡到龍芯平台上運行。

★ NodeJS下載
nodejs-v12.16.3(server系統) 點擊下載
nodejs-v12.16.3(debian系統) 點擊下載

★ 龍芯NPM源
源地址1:http://npm.loongnix.org:4873
源地址2:http://registry.loongnix.org:4873

說明:龍芯npm源設置方法與設置淘寶npm源完全類似,例如:npm config set registry
http://npm.loongnix.org:4873

到這里為止,我們已經涵蓋了大部分常用的編程語言如何運行在龍芯平台上的說明,為了更好的支持的發展,博主會繼續更新有關國產芯片和國產操作系統的文章,歡迎大家不吝“點贊、收藏、關注”一鍵三連。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM