马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1. 弁言
事变是如许的:前段时间我用 C++ 开辟了一个功能模块,本来跑在主流 Linux 发行版上稳如老狗。项目相近上线,忽然接到关照——得适配到信创情况,而且要在周末完成摆设并现场演示。结果周逐一大早,领导一进门就问:“这个适配工作,本日能做完吗?”
好家伙,我直接好家伙,周末制止的任务,周一问就我能不能当天搞定?如今层层加码一加就五天了?只能委曲答应了。不外幸亏领导也就是问问,实际上信创适配一共花了2~3天。着实大部分信创也就是 Linux 分发版的一种,假如抱负的情况下,一天就适配完成大概率是可行的。这里就记载一下笔者在 C++ 信创适配过程中踩过的那些坑。
2. Docker方案
信创(信息技能应用创新)体系中的操纵体系险些全部基于 Linux 内核,属于 Linux 发行版的国产化分支。当前主流产物如下:
操纵体系开辟单位底子泉源重要架构典范应用场景银河麒麟(KylinOS / Ubuntu Kylin)麒麟软件(中国电子旗下)Ubuntu / FreeBSD(早期)x86_64, ARM64(飞腾、鲲鹏)政府、军工、金融中标麒麟(NeoKylin)麒麟软件(已与银河麒麟归并)CentOS / Red Hatx86_64, ARM64企业服务器、关键底子办法统信 UOS(UnionTech OS)统信软件Debian / Deepinx86_64, ARM64, LoongArch(龙芯)党政办公、教导、通用桌面中科方德中科院软件所Fedora / Red Hatx86_64, ARM64金融、医疗、教导普华操纵体系中国电科Debian / Ubuntux86_64工业控制、嵌入式麒麟信安操纵体系麒麟信安CentOS / 自研加固x86_64, ARM64安全要求极高的专网情况华为 openEuler华为(开源社区)自研(兼容 RHEL 生态)x86_64, ARM64, RISC-V云盘算、服务器、信创云底座📌 注意:
- 龙芯(LoongArch) 是独立指令集,与其他架构不兼容。
- 飞腾、鲲鹏、海光、兆芯 等 CPU 中:
- 飞腾/鲲鹏 → ARM64
- 海光/兆芯 → x86_64(兼容 Intel/AMD)
Docker 具有 情况隔离 + 自包罗 的特性,一个 Docker 镜像自带:
- 完备的用户空间(glibc、库、工具链)
- 应用及其依靠
- 运行时情况(Python、Java、Node.js 等)
因此信创适配最好的方案就是利用 Docker。但是利用 Docker 也没那么简朴,由于信创体系不像其他 Linux 发行版那样随处可见,提前准备的 Docker 镜像不肯定能在差别信创体系上运行。大概来说,至少须要须要 满意两个条件:
条件阐明1. CPU 架构同等如都是 linux/arm64(飞腾/鲲鹏)或 linux/amd64(海光/兆芯)2. 不依靠宿主机特有服务如 systemd、特定硬件驱动、内核模块等举例来说,假如提前构建了一个 arm64v8/ubuntu:20.04 Docker镜像,内里跑一个 C++ 步调,那么理论上这个镜像可以在如下体系运行:
- 银河麒麟 V10(ARM64)
- 统信 UOS(ARM64)
- openEuler(ARM64)
- 乃至树莓派(ARM64)
但这些只是理论上的,实际的情况大概很复杂,好比说:
- 依靠特定国产中心件或安全模块
- 如调用 国密算法硬件加快卡、可信盘算模块(TPCM)
- 这类功能须要容器挂载装备或加载内核驱动 → 需在目标呆板上测试
- 利用了发行版特有包管理器或路径
- 好比硬编码 /etc/kylin-release 或调用 uos-update
- 办理方案:用标准 Linux 路径,制止探测发行版
- 龙芯(LoongArch)平台
- 指令集完全差别,必须单独构建 linux/loong64 镜像
- 现在 Docker Hub 官方镜像对 LoongArch 支持有限,需自行构建 base 镜像
- 安全合规要求
- 某些信创项目要求全部软件必须通过认证(如等保、密评)
- 纵然技能上能跑,也大概须要提供适配证明或检测陈诉
3. 运行时
3.1 gcc/g++7
固然 Docker 方案好用,但是没有提前准备也是没辙,因此这里笔者还是在本地情况中摆设。本地摆设第一步固然是摆设运行时情况,固然 C++ 步调不消摆设额外的本地运行时情况,但是谁能想到,这个信创体系没有预装 g++ :- [root@cg58 ~]# g++ --version
- -bash: g++:未找到命令
- [root@cg58 ~]# gcc --version
- gcc (GCC) 7.3.0
复制代码 实验利用 apt 指令没有乐成,那就先看看详细是哪个操纵体系:- [root@cg58 ~]# cat /etc/os-release
- NAME="kylin_arm"
- VERSION="V10 (Halberd)"
- ID="kylin"
- VERSION_ID="V10"
- PRETTY_NAME="kylin_arm"
- ANSI_COLOR="0;31"
复制代码 可以明白判定,利用的是 银河麒麟高级服务器操纵体系 V10(ARM64 架构),代号 “Halberd”,通常底层兼容 CentOS / RHEL(尤其是早期版本),但部分软件源和包管理大概颠末定制或限定。实验利用 yum 举行安装:- sudo yum install gcc-c++ -y
复制代码 也提示找不到安装包。不外幸亏可以联网,那么可以添加一个兼容的公网 ARM 源,由于银河麒麟 V10(ARM)与 openEuler 20.03 LTS 高度兼容,且 openEuler 提供完备的 ARM64 软件包,包罗新版 GCC。
运行以下下令创建新 repo 文件:
[code]cat
|