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
相关推荐
yuxb7321 分钟前
Linux 文本处理与 Shell 编程笔记:正则表达式、sed、awk 与变量脚本
linux·笔记·正则表达式
刘一说32 分钟前
CentOS 系统 Java 开发测试环境搭建手册
java·linux·运维·服务器·centos
wdxylb6 小时前
云原生俱乐部-shell知识点归纳(1)
linux·云原生
飞雪20077 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪8 小时前
关于Linux内核中头文件问题相关总结
linux
海绵不是宝宝8179 小时前
连接远程服务器上的 jupyter notebook,解放本地电脑
服务器·jupyter·github
Lovyk10 小时前
Linux 正则表达式
linux·运维
Fireworkitte11 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil90011 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char12 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos