qidao123.com技术社区-IT企服评测·应用市场

 找回密码
 立即注册

C++信创适配踩坑记

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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++ :
  1. [root@cg58 ~]# g++ --version
  2. -bash: g++:未找到命令
  3. [root@cg58 ~]# gcc --version
  4. gcc (GCC) 7.3.0
复制代码
实验利用 apt 指令没有乐成,那就先看看详细是哪个操纵体系:
  1. [root@cg58 ~]# cat /etc/os-release
  2. NAME="kylin_arm"
  3. VERSION="V10 (Halberd)"
  4. ID="kylin"
  5. VERSION_ID="V10"
  6. PRETTY_NAME="kylin_arm"
  7. ANSI_COLOR="0;31"
复制代码
可以明白判定,利用的是 银河麒麟高级服务器操纵体系 V10(ARM64 架构),代号 “Halberd”,通常底层兼容 CentOS / RHEL(尤其是早期版本),但部分软件源和包管理大概颠末定制或限定。实验利用 yum 举行安装:
  1. sudo yum install gcc-c++ -y
复制代码
也提示找不到安装包。不外幸亏可以联网,那么可以添加一个兼容的公网 ARM 源,由于银河麒麟 V10(ARM)与 openEuler 20.03 LTS 高度兼容,且 openEuler 提供完备的 ARM64 软件包,包罗新版 GCC。
运行以下下令创建新 repo 文件:
[code]cat
继续阅读请点击广告
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

×
登录参与点评抽奖,加入IT实名职场社区
去登录

QQ|手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199|浙ICP备20004199号 )|网站地图

GMT+8, 2025-12-4 18:12 , Processed in 0.204431 second(s), 31 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表