在WSL运行32位应用程序的神奇操作
原理
主要的操作是通过qemu-i386-static模拟来运行x32程序, 然后通过binfmt来指定使用qemu来运行给定x32二进制文件
首先需要开启debian的x32基础支持
dpkg --add-architecture i386
apt-get update
apt-get install libstdc++6:i386
这会在dpkg中添加i386架构, 这样就可以通过apt工具安装i386的包了, 然后安装libstdc++会自动安装libc6/libgcc_s, 这样就可以运行基本的x32程序了.
一般的Linux到这一步就已经可以运行x32的程序了, 但是对于WSL来说还是不行, 使用ldd exec
依然会告诉你这不是一个可执行文件, 于是说我们需要安装qemu.
安装qemu
apt-get update
apt-get install qemu-user-static
这样我们就可以通过qemu-i386-static exec
来实际的运行我们想要的x32程序了, 但是这样很麻烦, 于是我们可以配置binfmt来自动使用qemu来运行qemu.
配置binfmt
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'
service binfmt-support start
这样, 我们就可以像在正常Linux里面一样运行x32的程序了. 真是非常神奇的操作_(:3」∠)_
后记
当然每次启动要记得启动一下binfmt服务才行.
service binfmt-support start
Reference: https://github.com/Microsoft/WSL/issues/2468#issuecomment-374904520
还不快抢沙发