0

I'm getting an error while executing a binary that the binary cannot be found. I can see it using other commands.

>> 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

but when I run the command, I get the following error:

>> ./hyperfine --version
zsh: no such file or directory: ./hyperfine

Both commands were run in the same directory, I'm using RHEL8, and tried in bash/zsh with no luck, tried other commands like cat and vi. They seem to find the binary and open it but the execution fails.

Can anyone please advise what may be the issue here? What am I missing?

Thank you very much

3
  • 2
    What does file ./hyperfine output? Did you build the binary yourself, or did you copy it over from somewhere? What architecture are you running on (the output of uname -m)?
    – Kusalananda
    Sep 28 at 14:17
  • Thank you @Kusalananda ! "file" showed that it's ELF 32-bit LSB shared object instead of ELF 64-bit LSB shared object, x86-64. I've downloaded the wrong tar. Can you add this as an answer so I can mark it as the correct one for you get points? Thank you again, the 64bit version works fine.
    – Igor
    Sep 28 at 14:33
  • I don't need to write an answer as there is currently a very good answer that you can accept.
    – Kusalananda
    Sep 28 at 15:12

1 Answer 1

3

Looks like you downloaded hyperfine for the wrong architecture, like you're on a GNU/Linux x86_64 system and you downloaded https://github.com/sharkdp/hyperfine/releases/download/v1.17.0/hyperfine-v1.17.0-i686-unknown-linux-gnu.tar.gz instead of https://github.com/sharkdp/hyperfine/releases/download/v1.17.0/hyperfine-v1.17.0-x86_64-unknown-linux-gnu.tar.gz or the other way round.

Then:

$ 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.

You can run i686 executables on a x86_64 system, but here you're missing the 32 bit dynamic linker (and most likely the 32 bit libraries that that software is linked to).

The ENOENT error that execve() returns and that zsh translates to no such file or directory is about that /lib/ld-linux.so.2 that can't be found on your system.

While you could install the 32 bit versions of the libc, best would be to get the software for the right architecture.

2
  • I'm just curious if bash tells you anything more relevant under these circumstances
    – SwiftD
    Sep 29 at 1:22
  • 1
    @Swi No, It doesn't. I'm getting the same error on the same file. Unfortunately, the problem is on the OS level, not a shell one.
    – Igor
    Sep 30 at 13:50

Not the answer you're looking for? Browse other questions tagged .