高能预警:本文内容过于硬核,涉及编译器原理、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

到这里为止,我们已经涵盖了大部分常用的编程语言如何运行在龙芯平台上的说明,为了更好的支持的发展,博主会继续更新有关国产芯片和国产操作系统的文章,欢迎大家不吝“点赞、收藏、关注”一键三连。

如何在国产龙芯架构平台上运行c/c++、java、nodejs等编程语言的更多相关文章

  1. 国产龙芯3A3000处理器评测:与英特尔差距明显

    国产龙芯3A3000处理器评测:与英特尔差距明显 国产龙芯3A3000处理器评测:与英特尔差距明显 新浪财经APP缩小字体放大字体收藏微博微信分享579 新酷产品第一时间免费试玩,还有众多优质达人分享 ...

  2. 在龙芯小本上安装Debain8.10

    (图片是LEMOTE8089D笔记本,来自互联网) YX原来送了一个LEMOTE笔记本给我.CPU是首款真正的国产,龙芯2F,兼容mips的指令集. 笔记本原来的操作系统是Debian6,后来升级到了 ...

  3. 【Win 10应用开发】如何知道UAP在哪个平台上运行

    面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行.尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑.比 ...

  4. 在微软平台上运行 SAP 应用程序

     本博客介绍了在微软平台上运行 SAP 应用程序的相关信息,作者在基于微软平台使用 SAP 方面有着数十年经验. 发布关于 Azure 的 SAP 说明 几个月前,SAP 针对适用于 SAP 软件 ...

  5. Android系统移植(一)-让android系统在目标平台上运行起来

    编号),文件系统采用ubifs格式,控制台设备为ttyS1,波特率为115200 启动的第一个应用程序是/init (6)确保控制台的设置和硬件保持一致,如:硬件上串口用的是UART1,则内核启动参数 ...

  6. cygwin -- 在windows平台上运行的unix模拟环境

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...

  7. 龙芯3A4000-Debian 10上常用软件记录

    所用平台 硬件:龙芯3a4000 (MIPS64el) 操作系统:Debian 10(buster)+ MATE桌面 内核版本:4.19.90 以下所有软件同样适用于x86体系结构的Linux发行版. ...

  8. 国产龙芯服务器源码安装PostgreSQL数据库的方法

    1. 公司最近有一些国产化项目的需求, 要求在国产CPU的服务器上面安装pg数据库等. 2.. 但是差查了下中标麒麟的官网,在龙芯MIPS的操作系统包源里面仅有 postgreSQL 9.2 版本的r ...

  9. 在.net平台上运行伪JAVA

    由于在一个项目局方要求使用JAVA平台, 而当前又都是.net平台的应用. 重新用JAVA开发工作量太大. 时间也来不及. 想到在.net中有url rewrite功能, 何不先"骗&quo ...

随机推荐

  1. 什么是NPS 客户净推荐值?

    客户忠诚是企业在客户服务方面的最高目标. 客户是否忠诚通过一个问题即可判断,那就是--你会把这家企业推荐给朋友的可能性有多大?这就是著名的NPS指标,本文希望能讲清NPS客户净推荐值是什么,用好客服系 ...

  2. [c++] 二级指针的原理

    示例 将值(实参)传递给值(形参),无法更改val 1 #include <iostream> 2 using namespace std; 3 4 void change(int mem ...

  3. window 共享打印机

    https://www.zhihu.com/question/20653708 https://h30471.www3.hp.com/t5/da-yin-ji-yu-sao-miao-yi-de-an ...

  4. Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)

    在前一篇博文中介绍,服务器监控已经部署成功.如果每天都需要人去盯着服务情况,那也不太现实.既然监控平台已经部署好了,是不是可以自动触发报警呢? 在上一篇Prometheus架构中有讲到,核心组件之一: ...

  5. 使用Typora编写Markdown你真的会了吗

    目录 Typora 介绍 使用 常用快捷键 概述 标题 一级标题 二级标题 方式(推荐) 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 粗体斜体删除线 下划线 注释 分割线 脚注 ...

  6. Django(43)restful接口规范

    restful接口规范   什么是接口规范?接口规范就是为了采用不同的后台语言,也能使用同样的接口获取到同样的数据.如何写接口:接口规范是规范化书写接口的,写接口要写url.响应数据 ​  注:如果将 ...

  7. camera数字降噪(DNR)

    camera数字降噪(DNR) 闭路电视摄像机 无论多么出色和弱光,在黑暗中拍摄视频监控录像时都会不可避免地产生一些噪音.噪声是任何电子通信中不可避免的部分,无论是视频还是音频.本质上是静态的–视频信 ...

  8. CPU性能PK

    CPU性能PK AMD vs Intel 2020: Who Makes the Best CPUs? 英文原文链接:https://www.tomshardware.com/features/amd ...

  9. 2D池化IPoolingLayer

    2D池化IPoolingLayer IPooling层在通道内实现池化.支持的池类型为最大, 平均 和 最大平均混合. 层描述:二维池化 使用张量上的2D滤波器计算池化a tensor A, of d ...

  10. TensorRT 7.2.1开发初步

    TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...