2013-03-13 2 views
6

Quando si esegue un programma C che ho compilato con gcc dal terminale, viene visualizzato un errore di autorizzazione negato.Autorizzazione negata l'esecuzione di qualsiasi programma ccc compilato gcc su OS X (10.8.2) Mountain Lion

Per iniziare, ho verificato e riparato le autorizzazioni sul mio disco (prima di fare questo, lo stesso problema stava accadendo).

Per illustrare e isolare il problema, te lo mostrerò cosa succede con questo ultra-semplice programma Ciao Mondo (con altri programmi, si verifica la stessa cosa):

#include <stdio.h> 

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

Ora, risparmio che questo il mio desktop come helloworld.c. A questo punto, dal desktop, un ls -l rendimenti:

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

ho quindi compilare con gcc -c helloworld.c -o helloworld (Ho anche provato la compilazione senza il flag -o con gli stessi risultati). Nessun avviso o errore. Un ls -l restituisce ora:

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 

tentativo di eseguire l'output di gcc, con ./helloworld.o rendimenti:

-bash: ./helloworld.o: Permission denied 

Solo per il gusto di debug, se eseguo con sudo (sudo ./helloworld.o), restituisce:

sudo: ./helloworld.o: command not found 

Ora, se tento di impostare il flag eseguibile utilizzando chmod +x helloworld.o, come è stato consigliato da un sacco di ricerca di r isultati che ho trovato, ls -l rendimenti:

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 

Tuttavia, il tentativo di eseguire con ./helloworld.o ora ritorna:

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

Ora, per il debug di sake, where gcc rendimenti:

/usr/bin/gcc 

Così , puoi vedere che non sto utilizzando terze parti gcc.

Qualcuno sa quale potrebbe essere il problema? Ho provato a cercare in giro, ma non sono riuscito a trovare alcuna soluzione funzionante. Stavo avendo lo stesso problema in precedenza e da quando ho reinstallato di nuovo OS X (per ragioni diverse) e sto ancora avendo questo problema con un ambiente di sviluppo pulito e organizzato. Per riferimento, sono su OS X 10.8.2 e ho Xcode 4.6 insieme all'ultima versione degli strumenti Xcode Command Line (dal sito Web degli sviluppatori di Apple). Non ho installato gcc da Homebrew o da qualsiasi altra fonte di terze parti; è il gcc fornito con gli strumenti Xcode Command Line.

Grazie mille per il vostro aiuto! Apprezzo molto che tu abbia dedicato del tempo a leggere, diagnosticare e offrire il tuo aiuto. :)

+0

Ho avuto questo problema quando ho creato foobar in cui foobar.c ha avuto un errore. Quando ho risolto l'errore, ha funzionato. – quantumpotato

risposta

10

Si sta tentando di eseguire codice oggetto (helloworld.o) anziché compilare e collegare un file eseguibile. Non utilizzare l'opzione -c. Esegui invece:

$ gcc helloworld.c -o helloworld 

Sarà creato con autorizzazioni eseguibili. Puoi quindi correre.

$ ./helloworld 

come normale.


La ragione di questo è che l'opzione -c dice al compilatore solo per compilazione il file, ma non collegamento esso. Il processo di collegamento è necessario per creare il file eseguibile finale. Se non si fornisce -c, gcc eseguirà la compilazione e il collegamento per te dietro le quinte.

+0

Questo è esattamente! Grazie mille! Contrassegnerò la tua risposta come risposta non appena il sistema lo consentirà. :) –

+0

@ Michael: nessun problema, è stata una buona domanda! – teppic