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

    VisualPytorch beta发布了! 功能概述:通过可视化拖拽网络层方式搭建模型,可选择不同数据集.损失函数.优化器生成可运行pytorch代码 扩展功能:1. 模型搭建支持模块的嵌套:2. ...

  2. [刷题] 46 Permutations

    要求 整型数组,每个元素不相同,返回元素所有排列的可能 示例 [1,2,3] [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 树 ...

  3. 将top命令的输出,写入到文件中 top -b -n 1 -d 3 >>file.txt

    top -b -n 1 -d 3 >>file.txt 解析: -b :batch模式,可以重定向到文件中 -n 1:一共取1次top数据.后边加数字,表示次数 -d 3:每次top时间间 ...

  4. 在 Apache 上使用网络安全服务(NSS)实现 HTTPS--RHCE 系列(八)

        在 Apache 上使用网络安全服务(NSS)实现 HTTPS--RHCE 系列(八) 发布:linux培训 来源:Linux认证 时间:2015-12-21 15:26 分享到: 达内lin ...

  5. Ansible playbook编写Apache角色

    编写Apache角色:使用源码安装 在files中下载扩展包和安装包 [root@localhost project]# ls roles/httpd/files/ apr-1.6.5.tar.gz ...

  6. shell基础之exit,break,continue

    exit代码: 1 #!/bin/bash 2 echo "Is it morning? Please answer yes or no." 3 read YES_OR_NO 4 ...

  7. Java 中布尔(boolean)类型占用多少个字节

    为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就 boolean 类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean ...

  8. BLDC 无刷电机FOC驱动 STM32官方培训资料

    STM32 PMSM FOC SDK V3.2 培训讲座一http://v.youku.com/v_show/id_XNTM2NjgxMjU2.html?from=s1.8-1-1.2STM32 PM ...

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

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

  10. K8S集群etcd备份与恢复

    参考链接: K8S集群多master:Etcd v3备份与恢复 K8S集群单master:Kubernetes Etcd 数据备份与恢复 ETCD系列之一:简介:https://developer.a ...