Linux64位子系统运行32位elf
原文链接:https://github.com/Microsoft/WSL/issues/2468#issuecomment-374904520
原文是github的题主想运行32位gcc,所以原文会多一些针对方法。
下是总结的通用方法,亲测可用。
1. 安装qemu并设置binfmt
更新软件源
sudo apt update
安装qemu
sudo apt install qemu-user-static
设置binfmt,让系统能识别32位elf的文件头,并自动使用qemu运行之
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
2. 启动服务
注意! 每次重启WSL后,都需要重新执行!!
sudo service binfmt-support start
至此就已经可以使用了,直接执行32位elf文件即可正常运行。
暂停方法:停止服务即可:
sudo service binfmt-support stop
以下为可选操作,支持更方便的操作。
3.【可选】使之更易于使用
一:可以将2中的命令加入到.bashrc
或.bash_profile
脚本中以免除每次重启都要手动输入的烦恼
使用 vim 或其他文本编辑器添加在末尾即可
二:亦或者平时不希望它启动,只有需要时手动启动,可以如下设置命令别名,使用时输入32
即可。
注意alias命令仅在当前终端生效,所以应将其加入.bashrc
脚本。
alias 32='sudo service binfmt-support start'
3. 【可选】如何安装32位软件包
启用i386构架软件包
sudo dpkg --add-architecture i386
更新软件源
sudo apt update
以安装gcc为例:
sudo apt install gcc:i386