kk-*_*cbx 4 tar windows-subsystem-for-linux
我想解压缩 .tgz 文件,但我得到了ELF not found error. 我在 WSL 中使用 Windows 10 和 Ubuntu 22.04。
这是错误的屏幕截图:
更新的简短答案:
这应该在最新的 Jammy 更新中得到修复(请参阅下面的 Launchpad 报告)。
sudo apt update && sudo apt upgrade -y
Run Code Online (Sandbox Code Playgroud)
... 然后再试一次。
如果没有,请告诉我(更重要的是,Ubuntu 团队通过 Launchpad 报告),但这是旧的解决方法......
旧的简短回答:
printf '#!/bin/sh\nexec /lib64/ld-linux-x86-64.so.2 /usr/bin/gzip "$@"' | sudo tee /usr/local/bin/gzip
sudo chmod +x /usr/local/bin/gzip
Run Code Online (Sandbox Code Playgroud)
解释:
这是目前 WSL1 和 Ubuntu 22.04 (Jammy) 以及其他一些最新发行版的已知问题:
这使得 Jammy 在 WSL1 下相当无法使用,因为许多软件包(包括apt)都使用gzip.
请注意(对于使用不同术语搜索此内容的其他人),创建tar时的错误消息略有不同:
/bin/sh: 1: gzip: Exec format error
Run Code Online (Sandbox Code Playgroud)
gzip几年前,Ubuntu Eoan 中也发生过类似(但不相同)的情况。参考:
通过阅读有关这些问题的评论,我不清楚问题是存在于 WSL1 还是用于创建二进制文件的工具链中gzip。在 Eoan 案例中,该问题最终在 中“得到解决” binutils,但我不清楚这是否只是真正的 WSL1 核心问题的解决方法。
无论如何,有以下三种可能的解决方案:
如果可以,请在 WSL2 下运行 Jammy。WSL2 中的 Linux 内核可以gzip毫无问题地处理这些更改。这只是 WSL1 ELF 加载器中的一个问题。
使用上面的解决方法替换为gzip通过 调用“真实”(但已损坏)版本的路径上较早的版本/lib64/ld-linux-x86-64.so.2。
根据WSL GitHub 问题中的评论,可以修补gzip二进制文件来解决该问题。我个人并不喜欢这种方法,但如果您想尝试一下:
echo -en '\x10' | sudo dd of=/usr/bin/gzip count=1 bs=1 conv=notrunc seek=$((0x189))
Run Code Online (Sandbox Code Playgroud)
由于工具链中的某些内容可能是罪魁祸首,因此这个问题似乎也出现在:
据报道,该 GitHub 线程中也有针对 Node 问题的补丁。
然而,修补分发二进制文件并非没有风险。希望有人能够找出导致此问题的工具链问题,或者 WSL 团队将更改 ELF 加载程序代码来进行补偿。
| 归档时间: |
|
| 查看次数: |
7686 次 |
| 最近记录: |