我在执行二进制文件时遇到错误,无法找到该二进制文件。我可以使用其他命令看到它。
>> ls -alh
total 1.3M
drwxr-xr-x 3 igor 4.0K Sep 28 15:53 .
drwxr-xr-x 3 igor 4.0K Sep 28 15:53 ..
drwxr-xr-x 2 igor 4.0K Jun 4 09:24 autocomplete
-rw-r--r-- 1 igor 13K Jun 4 09:24 CHANGELOG.md
-rwxr-xr-x 1 igor 1.2M Jun 4 09:24 hyperfine
-rw-r--r-- 1 igor 9.8K Jun 4 09:24 hyperfine.1
-rw-r--r-- 1 igor 12K Jun 4 09:24 LICENSE-APACHE
-rw-r--r-- 1 igor 1.1K Jun 4 09:24 LICENSE-MIT
-rw-r--r-- 1 igor 9.8K Jun 4 09:24 README.md
但是当我运行命令时,出现以下错误:
>> ./hyperfine --version
zsh: no such file or directory: ./hyperfine
这两个命令都在同一目录中运行,我使用的是 RHEL8,并在 bash/zsh 中尝试过,但没有成功,尝试了其他命令,如cat
和vi
。他们似乎找到了二进制文件并打开它,但执行失败。
谁能告诉我这里可能有什么问题吗?我缺少什么?
非常感谢
答案1
看起来您下载的 hyperfine 架构错误,就像您在 GNU/Linux x86_64 系统上下载的https://github.com/sharkdp/hyperfine/releases/download/v1.17.0/hyperfine-v1.17.0-i686-unknown-linux-gnu.tar.gz代替https://github.com/sharkdp/hyperfine/releases/download/v1.17.0/hyperfine-v1.17.0-x86_64-unknown-linux-gnu.tar.gz或反之亦然。
然后:
$ file hyperfine
hyperfine: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=07cbf2d0f0cec091ae460dc287bbacdc9f158849, stripped
$ objdump -s -j .interp hyperfine
hyperfine: file format elf32-i386
Contents of section .interp:
0174 2f6c6962 2f6c642d 6c696e75 782e736f /lib/ld-linux.so
0184 2e3200 .2.
您可以在 x86_64 系统上运行 i686 可执行文件,但这里您缺少 32 位动态链接器(并且很可能缺少该软件链接到的 32 位库)。
execve()
返回并由 zsh 转换为的ENOENT 错误与您的系统上找不到的no such file or directory
错误有关。/lib/ld-linux.so.2
虽然您可以安装 32 位版本的 libc,但最好是获取适合正确架构的软件。