web-dev-qa-db-fra.com

Comment exécuter un fichier binaire sous Linux

J'ai un fichier appelé commanKT et je veux l'exécuter dans un terminal Linux. Quelqu'un peut-il aider en donnant la commande pour exécuter ce fichier? J'ai essayé ./commonRT mais j'obtiens l'erreur:

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

[blackberry@BuildMc MainApp]$ ls -al commonKT
-rwxrwxr-x. 1 sijith sijith 10314053 Feb 27 16:49 commonKT
14
Sijith

Pour exécuter un binaire, utilisez: ./binary_name.

Si vous obtenez une erreur: 

bash: ./binary_name: impossible d'exécuter le fichier binaire

ce sera parce qu'il a été compilé en utilisant une chaîne d'outils qui était pour une cible différente de celle sur laquelle vous essayez d'exécuter le binaire.

Par exemple, si vous compilez 'nom_binaire.c' avec arm-none-linux-gnueabi-gcc et essayez d'exécuter le binaire généré sur une machine x86, vous obtiendrez l'erreur susmentionnée.

25
Frazer

Pour exécuter un fichier binaire ou .run sous Linux à partir du shell, utilisez l'ami de la barre oblique

 ./binary_file_name

et si cela échoue à cause d'autorisations, vous pouvez essayer ceci avant de l'exécuter

 chmod +x binary_file_name
 # then execute it
 ./binary_file_name

J'espère que ça aide

9
Olu Smith

:-) Si ce n'est pas une faute de frappe, pourquoi utilisez-vous ./commonRT au lieu de ./commonKT ??

5
Jagannath

Le volume sur lequel il est monté est monté noexec.

5

Il est possible que vous ayez compilé votre binaire avec des paramètres d’architecture incompatibles sur votre hôte de build contre votre hôte d’exécution ..__

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

sur votre hôte de construction? En particulier, la variable COLLECT_GCC_OPTIONS peut vous donner des informations de débogage utiles. Ensuite, examinez les capacités de la CPU sur votre hôte d'exécution via

cat /proc/cpuinfo | grep -m1 flags

Recherchez les incompatibilités telles que -msse4.2 [enabled] sur votre hôte de génération, mais un indicateur sse4_2 manquant dans les capacités de la CPU.

Si cela ne vous aide pas, veuillez fournir le résultat de ldd commonKT sur l'hôte de construction et d'exécution.

2
user1978011

Ceci est une réponse à @craq:

Je viens de compiler le fichier à partir de la source C et de le définir pour qu'il soit exécutable avec chmod. Il n'y avait aucun message d'avertissement ou d'erreur de gcc.

Je suis un peu surpris que vous deviez le définir sur exécutable - ma gcc définit toujours l'indicateur de l'exécutable lui-même. Cela me suggère que gcc ne s'attendait pas à ce que ce soit le fichier exécutable final, ou qu'il ne s'attendait pas à ce qu'il soit exécutable sur ce système.

Maintenant, j'ai essayé de simplement créer le fichier objet, comme ceci:

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

(hello.c est un programme "Hello World" typique.) Mais mon message d'erreur est un peu différent:

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

D'autre part, cette sortie de la commande file est identique à la vôtre:

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

Alors que si je compile correctement, sa sortie est beaucoup plus longue.

$ 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

Ce que je dis, c'est: je suppose que cela a quelque chose à voir avec la façon dont vous compilez et liez votre code. Peut-être que vous pouvez nous éclairer sur la façon dont vous faites cela?

2
chw21

Ou bien, le fichier a un type de fichier et/ou une architecture que vous ne pouvez tout simplement pas exécuter avec votre matériel et/ou il n’existe pas non plus d’entrée de secours binfmt_misc permettant de gérer le format en question d’une autre manière. Utilisez file(1) pour déterminer.

1
jørgensen

Le seul moyen qui fonctionne pour moi (extrait de ici ): 

chmod a+x name_of_file.bin

Puis lancez-le en écrivant

./name_of_file.bin

Si vous obtenez une erreur d'autorisation, vous devrez peut-être lancer votre application avec les privilèges root:

 Sudo ./name_of_file.bin
1
Fábio

votre option de compilation -c fait de votre compilation une compilation et un assemblage, mais pas de lien.

0
user2919481

Si ce n'est pas une faute de frappe, comme indiqué précédemment, il pourrait s'agir d'options de compilateur incorrectes telles que la compilation de 64 bits en 32 bits. Ce ne doit pas être une chaîne d’outils.

0
musbach