win10上使用Linux子系统WSL时,如何解决-bash: ./xxxxxx: cannot execute binary file: Exec format error

主要原因是不支持32位程序,可以用如下方法启用:WSL默认使用 64bit的程序,不支持32位的程序,但我们可以使用QEMU来虚拟化内核。

1. 查看Linux操作系统版本

## 方法1. uname查看系统信息,uname就是UNIXname的缩写

uname -s    # -s或–sysname 显示linux内核名称
Linux

uname -r    # -r或–release 显示linux操作系统内核版本号
4.4.0-18362-Microsoft

uname -v    # -v 获取更详细的内核版本信息(译注:不是版本号,是指该内核建立的时间和CPU架构等)
#1-Microsoft Mon Mar 18 12:02:00 PST 2019

uname -n    # -n或-nodename 显示主机在网络节点上的名称或主机名称
BF-2020060xxxxx

uname -m    # -m或–machine 显示主机的硬件(CPU)架构
x86_64

uname -i    # -i 显示硬件平台类型或unknown
x86_64

uname -p    # -p 显示主机处理器类型或unknown
x86_64

uname -o    # -o 显示操作系统名称
GNU/Linux

uname -a    # -a或–all 显示系统详细信息:依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称
Linux BF-2020060xxxxx 4.4.0-18362-Microsoft #1-Microsoft Mon Mar 18 12:02:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux

## 方法2. 查看方式
file /bin/ls

# 根据输出信息确认此Linux版本为64位
/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, for GNU/Linux 3.2.0, stripped
此linux版本为64位。(64-bit)

2. 按照常规方式:原生 Ubuntu 添加 32bit 运行环境

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
sudo apt-get install lib32ncurses5 lib32ncurses5-dev
sudo apt-get install lib32z1

注:并没有解决问题。报错同样是 Exec format error

3. 安装QEMU

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'

4. 启动服务:注意每次调试32位程序之前都要启用一次

sudo service binfmt-support start

5. 启动32位架构

sudo dpkg --add-architecture i386
sudo apt update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

你可能感兴趣的:(win10上使用Linux子系统WSL时,如何解决-bash: ./xxxxxx: cannot execute binary file: Exec format error)