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

sudo apt install build-essential gfortran

2、multilib安装带版本号的包并创建asm符号链接

事实上gcc-multilib仅含有链接到x86_64-linux-gnu/asm的符号链接/usr/include/asm,而g++/gfortran-multilib是空包,因此实际上不必安装这些包,带版本号的包不会和交叉编译工具链冲突,只安装带版本号的包,并手动创建符号链接即可

# --install-recommends=false防止libc6-dev-{i386,x32}试图安装gcc-multilib
sudo apt install --install-recommends=false g{cc,++,fortran}-12-multilib
# gcc-multilib创建了这个重要的链接,需要加上
sudo ln -sv x86_64-linux-gnu/asm /usr/include/asm
# 如果这个链接造成了交叉编译工具链异常,可以临时删除
sudo rm /usr/include/asm

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

GRUB_CMDLINE_LINUX_DEFAULT="quiet syscall.x32=y"
GRUB_CMDLINE_LINUX="syscall.x32=y"

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

sudo apt install g{cc,++,fortran}-riscv-linux-gnu

你可能感兴趣的:(debian,服务器,linux)