今天發現在WSL中運行32位程序hmetis會報錯:
-bash: ./hmetis: cannot execute binary file: Exec format error
用file hmetis命令查看文件信息:
hmetis: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.0.0, stripped
經過查找,發現github上@Froosh給出了他的解決方案,通過安裝qemu來運行32位的程序:https://github.com/Microsoft/WSL/issues/2468
1. 首先安裝qemu and 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'
每次重新啟動WSL並希望i386支持時,您都需要重新激活此功能:
sudo service binfmt-support start
2. 接下來啟用i386體系結構和package
sudo dpkg --add-architecture i386 sudo apt update sudo apt install cpp-9:i386 sudo apt install gcc:i386
至此,就可以運行之前的32位binary了。
3. 設置開機啟動
vim /etc/myinit.sh
sudo service binfmt-support start