米饭虚拟机-nana版
deepin
8 hours ago 我觉得可以在github actions配置 编译龙芯版软件 的docker镜像 
Reply Like 0 View the author
我觉得可以在github actions配置 编译龙芯版软件 的docker镜像 
支持,很有技术含量。
作为多年的龙架构使用者,更需要的是在龙架构上通过二进制运行x86、ARM上的软件,希望大哥有空可以搞搞
我觉得可以在github actions配置 编译龙芯版软件 的docker镜像 
没用过github actions,大佬出个教程吧~
对搭建交叉编译环境过程中,我都是使用AI工具,有不少的坑,也遇到不少问题。搭建完成后,成功构建了前久参加社区比赛的作品---Deskmon桌面系统监视的龙芯版本。分享给一两个网友测试,目前还没收到反馈信息。
AI把这个笔记不断修改完善后,我想了想,还是把它分享出来给有需要的网友一个借鉴参考的地方。也希望社区的专业开发者大佬们对笔记存在的问题进行指正!
在 Deepin V25(x86_64)上搭 LoongArch64 交叉编译环境,有两条成熟路径:优先用 Deepin/Debian 仓库里的
gcc-loongarch64-linux-gnu系列包(最干净,跟系统包管理集成);仓库没有或版本不满足时,直接用龙芯官方预编译工具链。下面把两种方式都给你,并附上验证和依赖处理方法。⚠️ 先看:按项目类型选路线,别搭错环境
两条路线不是二选一,而是适用场景不同。选错了会卡在"编译器能跑、但链接不到目标库":
.so和头文件,链接阶段必报cannot find -lDtk6Widget;apt 多架构才能拉到 loong64 版的这些库.deb交叉包dpkg-buildpackage -a loong64要靠 multiarch 让dh_shlibdeps算准依赖方案一:通过 apt 安装仓库工具链(推荐先试)
Deepin V25 的仓库里已经可以安装 LoongArch64 的交叉编译器,包名遵循 Debian 命名规范:
如果编译时提示找不到目标架构的库,再补运行时/开发库:
装完后可以直接调用:
方案二:龙芯官方预编译工具链(仓库版本不够时用)
Deepin 仓库里的交叉 GCC 版本往往比较老,如果你需要较新的编译器(比如 GCC 15、binutils 2.45),从龙芯
build-tools发布页拿预编译包更省事:验证:
为了让环境变量永久生效,把
export PATH=...加到~/.bashrc末尾即可。配置交叉编译环境变量
无论哪种方案,编译前建议导出这几个变量:
实际编译示例
Makefile 项目:
Autotools 项目(
configure):如果
configure报"不支持 loongarch64",需要更新config.sub和config.guess:CMake 项目:
处理目标库依赖(sysroot)
当你编译的程序需要链接 LoongArch64 的第三方库时,手头的 x86_64 系统里没有对应的
.so。这一步是交叉编译最容易踩坑的地方,处理思路按你选的编译器路线分:路线 A:apt 多架构(方案一用户,依赖发行版库时首选)
gcc-loongarch64-linux-gnu本身不带目标库,要靠 apt 的 multiarch 机制把 loong64 版的库装到本机:装完后库落在
/usr/lib/loong64-linux-gnu,头文件落在/usr/include,交叉编译器和 pkg-config 会自动按loong64三元组找到它们,无需手动指定 sysroot。CMake 也无需--sysroot,开CMAKE_FIND_ROOT_PATH_MODE_*为ONLY即可。路线 B:龙芯官方 CLFS sysroot(方案二用户,需要非发行版库时用)
官方 GCC15 工具链只带了 glibc,不带任何第三方库。如果你的程序只依赖 libc,它的
target/目录够用;一旦要链 Qt6/DTK6/GTK 这类库,光靠官方工具链会直接链接失败。补库有两种做法:从 CLFS-for-LoongArch 下载
loongarch64-clfs-system-8.0-sysroot.tar.xz,解压后编译时指定:或在 GCC 命令行加
--sysroot=/path/to/sysroot。踩坑实录:linux-libc-dev 文件冲突(apt multiarch 路线必看)
走路线 A 装 loong64 dev 包时,
libc6-dev:loong64会拽来linux-libc-dev:loong64,而这个包装不上——这是 Deepin V25 打包的一个 bug,本节给出验证过的解法。根因
linux-libc-dev声明了Multi-Arch: same,按规范各架构文件路径应完全一致、仅内容不同。但 deepin 的 loong64 版和 amd64 版各自有架构特有的头文件,两版 839 个文件都落在/usr/include/linux/、/usr/include/drm/等同一路径,dpkg 解压 loong64 版时发现文件名与 amd64 版已有文件冲突,直接 abort。解法:造一个假包满足依赖
交叉编译器实际从
linux-libc-dev-loong64-cross包(装在/usr/loongarch64-linux-gnu/include/)找内核头,根本不需要真正的linux-libc-dev:loong64。所以造一个空壳包骗过依赖检查即可。第 1 步:准备假包目录
第 2 步:写 control 文件(关键是
Multi-Arch: same)第 3 步:拷贝 doc 文件(
Multi-Arch: same要求各架构 doc 文件 md5 一致)第 4 步:打包并安装
如果之前装到一半卡住了
apt install中途失败会留下大量iU(解压未配置)状态的 loong64 包。修复顺序:apt pin:防止 dist-upgrade 替换假包
假包版本号和源里真包相同(25.01.01.28),
apt dist-upgrade会认为该"替换"假包、重新触发文件冲突。用 apt pin 彻底封死:Pin-Priority: -1让 apt 永不安装/升级linux-libc-dev:loong64,dist-upgrade 自动跳过。验证:保留假包
假包不要卸载。一旦卸掉,
libc6-dev:loong64的依赖记录悬空,apt upgrade或apt install -f会尝试装真包,重新陷入冲突循环。假包只有 1.6 KB,无副作用。配合上面的 apt pin,dist-upgrade也不会碰它。验证编译产物
编译完后务必确认产物确实是 LoongArch64 架构:
如果需要在 x86_64 主机上直接跑起来测试,可以借助 QEMU 用户态模拟:
交叉打 deb 包(dpkg-buildpackage -a loong64)
给 loong64 架构打 deb 包,核心是
dpkg-buildpackage -a loong64+ 一个 CMake 交叉工具链文件。下面以 deskmon(DTK6/Qt6 CMake 项目)为例。第 1 步:写 CMake 交叉工具链文件
项目里放一个
cmake/loong64-toolchain.cmake:第 2 步:debian/rules 按架构分叉
第 3 步:debian/control 追加交叉编译器
第 4 步:构建
推荐路线总结:
apt install gcc-loongarch64-linux-gnu+dpkg --add-architecture loong64拉 loong64 库,不要用官方工具链(它的 sysroot 没有这些库,链接会失败)。两者技术上可共存、靠
PATH顺序切换,但别混用:一个项目要么全走 apt 体系,要么全走官方工具链 + 手补 sysroot,否则编译器找的库和链接器找的库会对不上。附:【deepin 插件开发活动】DeskMon —— DTK6 原生桌面系统监控 龙芯版下载,欢迎测试!
deskmon_1.0.3_loong64.deb.zip