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
相关推荐
‍理我35 分钟前
Linux系统编程(基础指令)上
linux·服务器
-杀意感知-37 分钟前
Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
linux
周湘zx1 小时前
k8s中的存储
linux·运维·云原生·容器·kubernetes
Linux猿1 小时前
828华为云征文 | 云服务器Flexus X实例:one-api 部署,支持众多大模型
服务器·大模型·llm·华为云·flexus云服务器x实例·华为云服务器·one-api
_平凡之路_2 小时前
解决ubuntu22.04 gnome-terminal 无法启动的问题
linux·运维·python
凯子坚持 c2 小时前
0基础带你入门Linux之使用
linux·运维·服务器
hgdlip2 小时前
电脑ip会因为换了网络改变吗
服务器·网络·tcp/ip·电脑
EterNity_TiMe_2 小时前
【Linux基础IO】深入Linux文件描述符与重定向:解锁高效IO操作的秘密
linux·运维·服务器·学习·性能优化·学习方法
python-码博士2 小时前
Rosetta 一:手把手教你用Linux安装Rosetta(全网最简洁)
linux·运维·服务器
你可以自己看2 小时前
python中函数式编程与高阶函数,装饰器与生成器,异常处理与日志记录以及项目实战
服务器·开发语言·python