2013-03-13 3 views
6

Lors de l'exécution d'un programme C que j'ai compilé avec le terminal gcc, j'obtiens une erreur d'autorisation refusée. Pour commencer, j'ai vérifié et réparé les autorisations sur mon disque (avant cela, le même problème se produisait).Autorisation refusée d'exécuter un programme c compilé par gcc sous OS X (10.8.2) Mountain Lion

Pour illustrer et isoler le problème, je vais vous montrer ce qui se passe avec ce programme Bonjour tout le monde ultra-simple (avec d'autres programmes, la même chose se produit):

#include <stdio.h> 

main() 
{ 
    printf("Hello World"); 
} 

Maintenant, je sauve cela mon bureau comme helloworld.c. À ce stade, à partir du bureau, un ls -l rendement:

total 8 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 

je compile puis avec gcc -c helloworld.c -o helloworld (je l'ai aussi essayé de compiler sans le drapeau -o avec les mêmes résultats). Aucun avertissement ou erreur Un ls -l retourne maintenant:

total 16 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 
-rw-r--r-- 1 michael staff 724 Mar 13 14:16 helloworld.o 

tentative d'exécution de la sortie de gcc, avec ./helloworld.o retours:

-bash: ./helloworld.o: Permission denied 

juste pour le plaisir de débogage, si j'exécute avec sudo (sudo ./helloworld.o), il retourne:

sudo: ./helloworld.o: command not found 

maintenant, si je tente de définir l'indicateur exécutable en utilisant chmod +x helloworld.o, comme cela a été recommandé sur un terrain de recherche r ésultats J'ai trouvé, ls -l: retours

total 16 
-rw-r--r-- 1 michael staff 56 Mar 13 14:08 helloworld.c 
-rwxr-xr-x 1 michael staff 724 Mar 13 14:16 helloworld.o 

Cependant, la tentative d'exécution avec ./helloworld.o retourne maintenant:

-bash: ./helloworld.o: Malformed Mach-o file 

Maintenant, pour l'amour de débogage, where gcc retours:

/usr/bin/gcc 

Alors , vous pouvez voir que je n'utilise pas un tiers gcc.

Est-ce que quelqu'un sait quel pourrait être le problème? J'ai essayé de chercher, mais je n'ai pas trouvé de solution de travail. J'ai eu ce même problème plus tôt et j'ai depuis réinstallé OS X (pour différentes raisons) et j'ai toujours ce problème avec un environnement de développement propre et organisé. Pour référence, je suis sur OS X 10.8.2 et j'ai Xcode 4.6 avec la dernière version des outils de ligne de commande Xcode (sur le site Web des développeurs d'Apple). Je n'ai pas installé gcc de Homebrew ou de toute autre source tierce; c'est le gcc fourni avec les outils de ligne de commande Xcode.

Merci beaucoup pour votre aide! J'apprécie vraiment que vous preniez votre temps pour lire, diagnostiquer et offrir votre aide. :)

+0

J'ai eu ce problème quand j'ai fait foobar où foobar.c avait une erreur dedans. Lorsque j'ai corrigé l'erreur, cela a fonctionné. – quantumpotato

Répondre

10

Vous essayez d'exécuter du code objet (helloworld.o) plutôt que de compiler et de lier un exécutable binaire. N'utilisez pas l'option -c. Exécuter à la place:

$ gcc helloworld.c -o helloworld 

Il sera créé avec des autorisations exécutables. Vous pouvez ensuite courir.

$ ./helloworld 

comme d'habitude.


La raison est que l'option -c indique au compilateur juste pour compiler le fichier, mais pas lien il. Le processus de lien est nécessaire pour créer le fichier exécutable final. Si vous ne fournissez pas -c, gcc compilera et reliera pour vous dans les coulisses.

+0

C'est exactement ça! Merci beaucoup! Je vais marquer votre réponse comme la réponse dès que le système le permet. :) –

+0

@MichaelI: pas de problème, c'était une bonne question! – teppic

Questions connexes