惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
Webroot Blog
Webroot Blog
T
The Blog of Author Tim Ferriss
S
Schneier on Security
罗磊的独立博客
P
Privacy & Cybersecurity Law Blog
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
P
Palo Alto Networks Blog
月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
量子位
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Stack Overflow Blog
Stack Overflow Blog
Recorded Future
Recorded Future
K
Kaspersky official blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
Lohrmann on Cybersecurity
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
L
LINUX DO - 热门话题
Help Net Security
Help Net Security
B
Blog RSS Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Cloudflare Blog
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
美团技术团队
云风的 BLOG
云风的 BLOG
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
V
Visual Studio Blog
G
GRAHAM CLULEY
AI
AI
Security Latest
Security Latest
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
Cyberwarzone
Cyberwarzone
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed

编程

[编程] 软件工程真的一直在进步吗? 我开始在代码中使用中文变量名了 - V2EX 软件工程里,最昂贵的成本到底是什么? - V2EX AI 正在淘汰小众编程语言 - V2EX 在 Codex 中可以直接调用 Claude 吗? 氛围编码生成的是代码,工程生成的是系统。氛围编程不是工程,大家怎么看? Tikrok8 新版本更新 被 composer 2.5 震撼了 在 AI 时代,现在的新项目大家怎么开始呢? [纯分享]怎么同时学会多个编程语言 现在 rust 是不是好起来了? - V2EX 用 just 管理终端命令,使“命令即代码” - V2EX Qoder teams 版本设计反人性 - V2EX AI 写代码真香喷;以后只要产品经理就可以了 - V2EX warp 有没有什么代码补全和格式化的方案,想代替 cursor - V2EX 被 KIMI 玩弄的一天 这么 lj 我是没想到的 - V2EX pyruns:把本地 Python 实验和 shell 任务真正整理起来的 Web UI - V2EX AI 写的项目要怎么维护?都是一次性代码吗? - V2EX claude-opus-4-6 大家实际使用感觉怎么样? - V2EX 关于加强学习效率的讨论 - V2EX 想用下智谱的 GLM 和 Minmax 的编程模型,有没有用过的分享下使用效果 - V2EX 设计后台微服务还是 mq - V2EX 请教 Hammerspoon 在获取 WIFI ssid 为 nil 问题 - V2EX 发一个更新版的 rules - V2EX Claude Opus 4.5 发布了,前端工程师的天,塌了又塌(AI 计量单位) - V2EX codex 的一些小感受 - V2EX agent 开发据说很有前途 - V2EX 有人实际遇到(或感知到)过比特翻转或数据静默损坏么? - V2EX 没钱就只能将就着用 Trae 和免费模型吗? - V2EX AI 编码的一个细节 - V2EX 网站 favicon 图标自动获取接口 - V2EX 求问单生产者场景使用消息队列是否过度设计? - V2EX 能替代 cursor autocomplete 的方案有哪些? - V2EX 一个 PHP 的博客程序,让 Claude 用 Go 重构,当前靠谱吗? - V2EX 从零开始的 AI 导航站:现在免费提交,有必要开通支付吗? - V2EX 在命令行使用 claude code /qwen code 和在类 cline 插件中使用有什么区别? - V2EX 新红、矩阵通、新榜这种平台,数据到底是怎么获取到的? - V2EX cursor 自定义 model 报错,真报错还是搞小动作? - V2EX springboot 并发调用存储过程 - V2EX 全开源跨平台桌面 app 开发框架 soui5 成功完成 windows, Linux ,macos 三端适配 - V2EX 求英文编程社区提问新手教程 - V2EX 说真的朋友们,有被感动到 - V2EX 让 Agent 能根据 Prompt 自主选择 MCP tools,实现要怎么处理? - V2EX 求助!使用 AI 生成低代码数据的方案 - V2EX 为什么公有模型和私有模型使用效果很大差异 - V2EX cursor 还能用了吗? - V2EX 从 markdown 编辑器直接复制内容到微信公众号平台保持样式不变,这是怎么做到的? - V2EX AI 写代码比我好,一直不动脑子,不太会写代码了 - V2EX 编程真无聊啊 - V2EX 开源架构推荐 - V2EX Cursor 对比 Windsurf - V2EX Windsurf 代码补全失效 - V2EX 项目快写完才发现白写了 - V2EX 想用 ImGui 做点桌面的小工具练练手,请教一下大家有什么思路? - V2EX 常用大模型编程项目得分排名 04-19 - V2EX 请问, AI 时代,新手入门编程开发,应该选择哪个语言? - V2EX 无需服务器部署官方 qq 机器人 这种后台接口设计是否合理 - V2EX ai 编程怎么选工具 nextjs 能把人逼疯
[转载]信创全平台 C++17 交叉编译工具链 - V2EX
erbin · 2026-07-07 · via 编程

这套工具链原本一直想藏着掖着作为个人的“私服”使用。

但转念一想,随着公司人员的流动,这些底层基建早晚也会流传出去。

与其等别人缝缝补补地发出来,不如自己做个彻底的整理和开源,也算是为国产化平台的快速发展做个贡献吧。

💡 名词速查:

  • loongarch64_OA:指代 Loongarch64 Old ABI (龙芯旧世界)
  • loongarch64_NA:指代 Loongarch64 New ABI (龙芯新世界)

获取及使用:请直接下拉至文章末尾查看下载链接。


🛠️ 搭建与演进过程

纯手工阶段:mips64el ( 2020-2021 年)

笔者第一次接触交叉编译其实是出于对嵌入式的好奇,买了个开发板。

后来在上家公司适配龙芯(mips64el)系统时,遭遇了极端的开发环境:

公司规模很小,甚至没有 Git 和 SVN 服务。

每天只能靠着 U 盘把代码小心翼翼地往目标机里单向导入(还不敢插网线)。

为了摆脱这种极其低效的“人肉同步”模式,便开始琢磨:

既然 ARM 平台可以通过 x86 宿主机交叉编译,mips64el 理论上也可以。''

查阅资料后确认,GCC 源码原生就支持 mips 架构。

于是笔者开始了纯手工构建的踩坑之旅:

从网上到处扒 GCC 的编译参数,手动下载 GMP 、MPFR 等各个依赖的源码包,反复调整 --build--host 以及软硬浮点等底层 ABI 参数。

当时笔者用的是一台兆芯(中标麒麟)的机器,每次改完参数都是临下班前挂起编译,一编就是几个小时,次日早上开盲盒看结果。

在不知道处理了多少次编译报错后,终于成功构建出了一个能正常工作的交叉编译工具链,并在目标机上跑通了 "Hello World"。

然后笔者发现了龙芯开源社区提供的官方工具链……

艹!

考虑到自行编译 GCC 涉及的参数极其庞杂,万一某个指令集参数配错,基于这套编译器构建的上层工具(比如 Qt )在后期生产环境中也会毁于一旦。

以防万一,最后含泪放弃了手工版本,切换成了官方的 cross-gcc-4.9.3-n64-loongson-rc6.1

有了底层编译器,下一步就是 Qt 。 当时的国产化系统普遍标配 Qt 5.6.1 或 5.6.3 ,所以笔者就将版本定在了 5.6.3。 那时候网上的参考资料大多还带着 Qt4 的历史包袱,需要拷贝 mkspecs/qws 目录下的模板来修改设备配置。 虽然方法老旧,但也总结出了一些奇技淫巧。

总而言之、言而总之。

在 21 年初,笔者算是整体走通了一遍 GCC + Qt 的交叉编译流程。

规模化阶段:arm64 与 loongarch64_OA ( 2021 年)

21 年笔者跳槽到了一家初具规模的公司,接触到的国产芯片也多了起来。

此时对于 arm64 的工具链适配就轻车熟路了。

鉴于 arm64 是仅次于 x64 的芯片架构平台,网上有大量现成的 GCC ,笔者只需要挑选基于低版本 GLIBC 构建的工具链即可。

当时选定的是 gcc-linaro-5.4.1-2017.01-x86_64_aarch64-linux-gnu

对于 loongarch64 (Old ABI)同样如此,选择了当时开源社区提供的 8.3.0 工具链。

这两者的 Qt 框架全量跨编,完全复用了之前在 mips64el 平台跑通的成功经验,可以说顺利十分。

特殊适配:sw_64 ( 2022 年)

申威架构的情况比较特殊。

忌惮于商业保密协议,申威的底层 GCC 工具链笔者无法对外提供。

但笔者针对申威由 Qt 5.6.3 官方源码 编译出来的 Qt 交叉编译工具链 完全属于个人的编译产物,不会受此限制。

关于申威的构建技巧无非一层窗户纸:

在配置参数时,将申威指定为其前身 alpha64 架构进行编译。

这是笔者回忆在上家公司了解各个国产芯片架构发展史时冒出的灵感,这几年笔者编译包括 Qt 在内的各种第三方库也反复论证了这个灵感。

(注:sw_64 架构进行过 ABI 版本迭代,不过 Old ABI 的保有量极少。如果遇到,通常建议客户直接升级系统至 New ABI 发行版系统。)

自动化重构:loongarch64_NA 与 crosstool-ng ( 2026 年)

随着龙芯 loongarch64 架构合并至上游 GNU GCC ,此前匆忙推出的旧世界 ABI 因为不满足 GNU 官方规范,自然过渡到了满足 GNU 标准的新世界 ABI (New ABI)。

这也导致了新旧二进制文件不再兼容。

代码合并后,龙芯开源社区并没有及时发布现成的 loongarch64_NA 工具链。

就在这个时候,AI 已经流行并且智商在线了。

笔者查到了一个叫 crosstool-ng 的神器。

唉!

那笔者前几年手搓 mips64el 吃那么多苦是为了什么?

于是,loongarch64_NA 的底层编译器就成了笔者使用 crosstool-ng 自动化构建的首个产物。

同时,它的 Qt 交叉编译流程也终于摆脱了老旧的 qws 模式,正式切回了 Qt5 标准的构建方式。

进化:统一 GCC 8.3+ 与 C++17 矩阵

自从打开了 crosstool-ng 的魔盒,笔者一直在思考一件事:

是否可以通过这个工具,把所有架构的工具链版本全部向申威和龙芯旧世界的 8.3 版本对齐,使整个项目从 C++11 进化至 C++17 ?

毕竟 C++11 的第三方库已经逐渐停止维护。

终于有天笔者按耐不住了……

后续经过一段时间的对各种编译错误的处理(记得主要是 GCC 8.3 + GLIBC 2.12 的搭配引起的),笔者最终统一了各个平台的编译器版本:

构建出了全套基于 GCC 8.3+ 的工具链矩阵。

这使得整个项目可以顺利迭代并支持到 C++17 标准,同时由于严格控制了 glibc 依赖底线。

这套工具链的编译产物依然完美保持了对老旧生产系统(如 CentOS 6)的部署兼容性。


🔗 下载地址

下载前请仔细查阅自述文档,随后再进入 release 页面下载。


转载望注明出处

关于后续演进

开源不易,全架构的适配与编译更是耗费了笔者大量的时间和精力。

如果这套工具链帮你节约了加班时间,希望大家多多支持,去 GitHub 点个 Star ⭐!

后续,笔者会逐渐升级 Qt 工具链全套为 5.15.xx 。

也会尝试构建出能够让 CentOS 6 运行 C++23 、26 程序的工具链,让大家体验更优质的开发过程。

文章转载源至本人博客园