马小松
deepin
2025-01-16 13:05 
Reply Like 0 View the author

赞赞赞,感谢分享
持续跟进学习,感谢分享。
学习中。。。
mark 感谢大佬的贡献
学了很久还是没搞懂,因为有obs托管编译的存在,一直想用这个
但这个只支持 dpkg-buildpackage -us -uc -b的方式编译
而我想编译的大部分都是用cmake,meson这类构建的,我不知道怎么能转换成debian源码包
很棒
Popular Events
More
如何从源代码为多架构打包
.deb文件声明:其实我只有x86比较熟悉,arm和loongarch其实都不是很会,只是有坛友询问,于是我通过查找相关资料,询问相关大佬,以及结合我自己的理解和经验,总结出来的一篇文章。可能文章错误疏漏之处难以避免,所以本文经供参考,实际工作请进行更深入的学习或资讯相关技术人员,有错误请指出,谢谢,有部分内容也使用了AI。
在之前的教程中,我们学习了如何将源码打包成
.deb包。但如果你想支持 AMD64(主流桌面架构)、ARM64(移动设备架构,比如树莓派)和 LoongArch64(国产龙芯架构),就需要一点额外的努力。这篇教程将带你从零开始,从源码编译到打包,完成适配多个架构的.deb文件制作。为了更好地说明,我们继续以 GNU Hello(著名的“Hello, World!”程序)为例,一步步实现多架构支持。
一、什么是架构?
架构 指的是计算机处理器的类型和指令集。常见架构包括:
为什么需要为多架构编译?
因为不同架构的处理器工作方式不同,二进制文件必须针对特定架构编译才能运行。Windows 大多数软件是直接打包 x86 和 x86_64 两种架构,而 Linux 允许灵活支持更多架构。
二、准备工具
要完成多架构编译和打包,你需要以下工具:
build-essential:常用编译工具集合。checkinstall:打包工具,可以直接将源码编译成果打包为.deb文件。gcc-aarch64-linux-gnu和gcc-loongarch64-linux-gnu:交叉编译工具链,用于在当前系统上为 ARM 和 LoongArch 架构编译代码。qemu和qemu-user-static:运行和测试非原生架构的程序。三、下载源码
以 GNU Hello 为例,下载源码:
如果源码压缩包中没有
configure文件,说明需要生成自动化配置脚本:运行
autoreconf后,configure文件就会生成。如果还有问题,可以执行作者提供的./autogen.sh脚本。四、多架构编译
1. 创建独立的编译目录
为每种架构创建一个编译目录,防止文件冲突:
2. 逐一编译每种架构
(1) 编译 AMD64
这是当前系统的架构,可以直接编译:
(2) 编译 ARM64
使用交叉编译工具链:
(3) 编译 LoongArch64
同理,指定 LoongArch64 的交叉编译工具链:
3. 解决常见问题
如果在编译过程中提示找不到目标架构的库:
如果
configure文件提示不支持某架构,更新config.sub和config.guess文件:五、生成
.deb包1. 为每个架构生成
.deb文件(1) 使用
checkinstall打包(2) 使用
dpkg-buildpackage打包如果你已经配置了
debian/文件夹,可以直接运行:2. 检查生成的文件
打包完成后,检查生成的
.deb文件:hello_2.10_amd64.debhello_2.10_arm64.debhello_2.10_loongarch64.deb六、为
.deb包添加多架构支持修改
control文件以支持多架构:然后重新打包:
七、常见问题及解决方法
如果
.deb文件安装失败,提示依赖错误,需要在control文件中声明依赖项:如果多次运行
checkinstall导致文件冲突,清理后重试:八、总结
通过上述步骤,你可以为 AMD64、ARM64 和 LoongArch64 架构分别生成
.deb文件,实现多架构支持。虽然过程稍显繁琐,但只要你愿意花时间琢磨,Linux 的多架构支持会让你的软件触及更多设备和用户群体!继续加油,你已经很棒了!最后,别问我玲珑软件包怎么搞,我不会😂哪位大佬能够出个详细的教程教教我就好了。