当我尝试在 Windows(WSL)上的 Ubuntu 22.04 上运行时node
出现错误:
-bash:/usr/bin/node:无法执行二进制文件:可执行格式错误
我尝试重新安装它
sudo apt install --reinstall nodejs
npm
当完全卸载并重新安装它们没有帮助时。
在该文件上运行所产生的结果与在有效的文件file
上运行所产生的结果相同。ls
$ file /usr/bin/node
/usr/bin/node: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7abab52c01bf27bc053d24b0fad7f95c9e50d2f, for GNU/Linux 3.2.0, stripped
$ file /usr/bin/ls
/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=897f49cafa98c11d63e619e7e40352f855249c13, for GNU/Linux 3.2.0, stripped
我该如何修复我的节点?
我的 WSL 和 Windows 版本:
WSL version: 2.2.4.0
Kernel version: 5.15.153.1-2
WSLg version: 1.0.61
MSRDC version: 1.2.5326
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.26091.1-240325-1447.ge-release
Windows version: 10.0.22621.3880
Ubuntu 发行版:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.3 LTS
Release: 22.04
Codename: jammy
这是 WSL1 上的一个已知问题,我刚刚在我的系统上重现了它,以确认这就是您所看到的问题。请参阅此 GitHub 问题和此 Stack Overflow 问题。它与此 AU 问题具有相同的根本问题
gzip
。在这种gzip
情况下,维护人员选择修补二进制文件以解决该问题,但由于该问题也可能出现在其他二进制文件中,例如apt
您所发现的 Node.js 版本。从您的评论中:
我猜测你的 WSL默认版本设置为 1。你可以使用以下命令进行检查:
并使用以下命令确认 Ubuntu 正在作为 WSL1 运行:
假设你的系统支持 WSL2,你应该:
您可能需要备份所有关键文件,以防升级过程中出现问题。
附注:虽然不是抱怨,但我认为 WSL1 已被弃用,尽管微软团队尚未发布这一声明。据我所知,两年多来 WSL1 中没有修复任何错误,包括这个相当关键的问题。
我唯一的“抱怨”是,如果真是这样,我希望微软能正式宣布弃用。他们可能在等待修复 WSL2 9P 文件系统性能问题,但我不知道。
我卸载了该版本并从nodejs 站点
apt
下载了预构建的二进制文件,现在它可以工作了。具体来说是适用于 Linux x64 的版本。