【工程项目经验】Bash On Windows(WSL)无法运行32Bit程序

一、背景
在WSL下,使用gcc -m32编译出的32位程序无法运行,提示:

demo: cannot execute binary file: Exec format error

file demo#查看文件信息
demo: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24

二、解决办法
github上@Froosh给出了他的解决方案,通过安装qemu来运行32位的程序

安装 qemu & binfmt

sudo apt update
sudo apt install qemu-user-static
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'

这一步实现了把程序的运行交由qemu-user-static来运行,从而实现运行32位

注意每次重启WSL都得重新开启,可将这步加到开机自动启动中

sudo service binfmt-support start

三、WSL开机启动设置
1.WSL中添加文件

vim /etc/myinit.sh
sudo service binfmt-support start

2.在Windows下添加启动文件
(1).Ctrl+R打开"运行",输入"shell:startup",会弹出StartUp目录
(2).创建wsl-binfmt-support.vbs文件

Set ws = WScript.CreateObject("WScript.Shell")
cmd = "C:\Windows\System32\bash.exe -c ""bash /etc/myinit.sh"""
' 运行命令不显示cmd窗口
ws.Run cmd, 0, false
Set ws = Nothing
WScript.quit

搞定。

参考:
https://github.com/Microsoft/WSL/issues/2468
https://blog.csdn.net/fcymk2/article/details/79711566

参考网址:https://www.cnblogs.com/TatuCz/p/10330820.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值