I compiled a simple hello world C program inside of an alpine linux container and copied it onto my ubuntu host. To my surprise, I am not able to run the binary on my ubuntu host. Instead, I get the following error when I try to execute the program.
$ /bin/bash ./hello
$ ./hello: ./hello: cannot execute binary file
Why can't I run my program that was compiled on alpine on ubuntu?
UPDATE I made the mistake of trying to run the C program as a bash script. However, after correcting my mistake, I still get an error...
$ ./hello
$ bash: ./hello: No such file or directory
I have made the binary executable, so that should not be the issue. This error message does not show up when running the same program compiled on the host.
UPDATE Let me clarify a few points.
- One executable was built in a ubuntu container and copied onto the ubuntu host. This executable works.
- The other executable was built using an alpine container and copied onto the ubuntu host. This executable does not work.
- Both executables have their executable bit set. When I run ./hello, I do it within the directory where the executable in question resides.
- When I run file on the executable compiled using the ubuntu container, I get the following output.
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=bc9e3e2ecfc026f8077dca28dbbdee4778862d7a, not stripped
- When I run ldd on the executable compiled using the ubuntu container I get the following output.
linux-vdso.so.1 (0x00007ffdbc79e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f517b5ae000)
/lib64/ld-linux-x86-64.so.2 (0x00007f517bba1000)
- When I run file on the executable compiled using the alpine container, I get the following output.
hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-, with debug_info, not stripped
- When I run ldd on the executable compiled using the alpine container, I get the following output.
linux-vdso.so.1 (0x00007ffec27f7000)
libc.musl-x86_64.so.1 => not found