Debian如何让multilib和交叉编译工具链共存

Debian一个槽点是gcc/g++/gfortran-multilib和交叉编译工具链如gcc/g++/gfortran-riscv64-linux-gnu会互相卸载,解决办法如下:

1、安装build-essential(gcc/g++/libc6-dev/make/dpkg-dev)和gfortran,记下被安装的gcc版本,这里假设被安装的是gcc-12

bash 复制代码
sudo apt install build-essential gfortran

2、multilib只安装dev库

事实上gcc/g++/gfortran-multilib和gcc/g++/gfortran-12-multilib等是只含有少量符号链接的空包,因此实际上不必安装这些包,只安装对应的dev库,并手动创建某些重要的符号链接即可

bash 复制代码
# 防止libc6-i386/x32-dev试图安装gcc-multilib
# 也可以sudo nano /etc/apt/apt.conf.d/99synaptic然后手动编辑为false
sudo sed -i -e 's/APT::Install-Recommends "true";/APT::Install-Recommends "false";/g' /etc/apt/apt.conf.d/99synaptic
# 安装32位库
sudo apt install libc6-dev-i386 lib32gcc-12-dev lib32stdc++-12-dev lib32gfortran-12-dev
# 安装x32(64位指令集32位ABI)库
sudo apt install libc6-dev-x32 libx32gcc-12-dev libx32stdc++-12-dev libx32gfortran-12-dev
# gcc-multilib创建了这个链接
sudo ln -sv x86_64-linux-gnu/asm /usr/include/asm

x32程序如果需要运行的话,还需要sudo nano /etc/default/grub将相关内容改为下面的形式,然后sudo update grub

bash 复制代码
GRUB_CMDLINE_LINUX_DEFAULT="quiet syscall.x32=y"
GRUB_CMDLINE_LINUX="syscall.x32=y"

3、安装其他交叉编译工具链

bash 复制代码
sudo apt install g{cc,++,fortran}-riscv-linux-gnu
相关推荐
NamoAmitabha1287 小时前
libpng12-0 1.2.54-1ubuntu1.1 (amd64 binary) in ubuntu xenial
linux·ubuntu20.4
Madison-No77 小时前
搭建项目测试环境
linux·运维·服务器·python
吴声子夜歌8 小时前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121388 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
xiaoye-duck9 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
云老大-阿里云国际站代理商10 小时前
华为云国际站服务代理商:NAT网关怎么配?多台ECS共用公网IP要注意什么
服务器·华为云·云计算
zx_7414848110 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS10 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿11 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
做运维的阿瑞12 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python