如何在国产龙芯架构平台上运⾏cc++、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等) 。
js脚本开发那么到这⾥,我们已经知道要解决在龙芯架构平台上运⾏java或者nodejs这种动态编译型语⾔该如何做了,jdk和nodejs都是使⽤c/c++编写的,那么我们就可以编译jdk和nodejs(含v8引擎)的源码(c/c++)到龙芯指令集就可以了
可喜的是龙芯平台帮我做了这件事,⽬前龙芯平台已经可以⽀持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系统)
到这⾥为⽌,我们已经涵盖了⼤部分常⽤的编程语⾔如何运⾏在龙芯平台上的说明,为了更好的⽀持的发展,博主会继续更新有关国产芯⽚和国产操作系统的⽂章,欢迎⼤家不吝“点赞、收藏、关注”⼀键三连。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。