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
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.
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
:-) Si ce n'est pas une faute de frappe, pourquoi utilisez-vous ./commonRT
au lieu de ./commonKT
??
Le volume sur lequel il est monté est monté noexec
.
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.
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?
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.
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
votre option de compilation -c fait de votre compilation une compilation et un assemblage, mais pas de lien.
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.