Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run binary file in Linux

Tags:

linux

bash

I have a file called commanKT and want to run it in a Linux terminal. Can someone help by giving the command to run this file? I tried ./commonRT but I'm getting the error:

"bash: ./commonrt: cannot execute binary file"

[blackberry@BuildMc MainApp]$ ls -al commonKT
-rwxrwxr-x. 1 sijith sijith 10314053 Feb 27 16:49 commonKT
like image 737
Sijith Avatar asked Feb 28 '12 06:02

Sijith


People also ask

How do you make a binary file executable in Linux?

To make the file executable first, right-click on the binary file and then properties and go to permissions. On Permissions thick the checkbox with the option allows executing the file as program close the program and double click on the binary.


8 Answers

To execute a binary, use: ./binary_name.

If you get an error:

bash: ./binary_name: cannot execute binary file

it'll be because it was compiled using a tool chain that was for a different target to that which you're attempting to run the binary on.

For example, if you compile 'binary_name.c' with arm-none-linux-gnueabi-gcc and try run the generated binary on an x86 machine, you will get the aforementioned error.

like image 79
Frazer Avatar answered Oct 04 '22 05:10

Frazer


To execute a binary or .run file in Linux from the shell, use the dot forward slash friend

 ./binary_file_name

and if it fails say because of permissions, you could try this before executing it

 chmod +x binary_file_name
 # then execute it
 ./binary_file_name

Hope it helps

like image 35
Zuko Avatar answered Oct 04 '22 06:10

Zuko


The volume it's on is mounted noexec.

like image 28
Ignacio Vazquez-Abrams Avatar answered Oct 04 '22 06:10

Ignacio Vazquez-Abrams


:-) If not typo, why are you using ./commonRT instead of ./commonKT ??

like image 39
Jagannath Avatar answered Oct 04 '22 05:10

Jagannath


It is possible that you compiled your binary with incompatible architecture settings on your build host vs. your execution host. Can you please have a look at the enabled target settings via

g++ {all-your-build-flags-here} -Q -v --help=target

on your build host? In particular, the COLLECT_GCC_OPTIONS variable may give you valuable debug info. Then have a look at the CPU capabilities on your execution host via

cat /proc/cpuinfo | grep -m1 flags

Look out for mismatches such as -msse4.2 [enabled] on your build host but a missing sse4_2 flag in the CPU capabilities.

If that doesn't help, please provide the output of ldd commonKT on both build and execution host.

like image 38
user1978011 Avatar answered Oct 04 '22 07:10

user1978011


This is an answer to @craq :

I just compiled the file from C source and set it to be executable with chmod. There were no warning or error messages from gcc.

I'm a bit surprised that you had to 'set it to executable' -- my gcc always sets the executable flag itself. This suggests to me that gcc didn't expect this to be the final executable file, or that it didn't expect it to be executable on this system.

Now I've tried to just create the object file, like so:

$ gcc -c -o hello hello.c
$ chmod +x hello

(hello.c is a typical "Hello World" program.) But my error message is a bit different:

$ ./hello
bash: ./hello: cannot execute binary file: Exec format error`

On the other hand, this way, the output of the file command is identical to yours:

$ file hello
hello: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped

Whereas if I compile correctly, its output is much longer.

$ gcc -o hello hello.c
$ file hello
hello: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=131bb123a67dd3089d23d5aaaa65a79c4c6a0ef7, not stripped

What I am saying is: I suspect it has something to do with the way you compile and link your code. Maybe you can shed some light on how you do that?

like image 44
chw21 Avatar answered Oct 04 '22 07:10

chw21


The only way that works for me (extracted from here):

chmod a+x name_of_file.bin

Then run it by writing

./name_of_file.bin

If you get a permission error you might have to launch your application with root privileges:

 sudo ./name_of_file.bin
like image 38
Fábio Avatar answered Oct 04 '22 05:10

Fábio


Or, the file is of a filetype and/or architecture that you just cannot run with your hardware and/or there is also no fallback binfmt_misc entry to handle the particular format in some other way. Use file(1) to determine.

like image 22
jørgensen Avatar answered Oct 04 '22 07:10

jørgensen