2013-03-13 20 views
6

Podczas wykonywania dowolnego programu C, który skompilowałem z gcc z terminala, pojawia się błąd odmowy uprawnień.Zgoda na odmowę wykonania dowolnego programu c z kompilacją gcc na OS X (10.8.2) Mountain Lion

Aby rozpocząć, zweryfikowałem i naprawiłem uprawnienia na moim dysku (przed wykonaniem tego problemu wystąpił ten sam problem).

Aby zilustrować i wyizolować problem, pokażę ci, co się dzieje z tym bardzo prosty program Hello World (z innymi programami, występuje to samo):

#include <stdio.h> 

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

Teraz mogę zapisać to mój pulpit jako helloworld.c. W tym momencie, z pulpitu, an ls -l Powroty:

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

Następnie skompilować z gcc -c helloworld.c -o helloworld (Ja również próbowałem kompilacji bez flagi -o z tych samych wyników). Brak ostrzeżeń i błędów. ls -l teraz powraca:

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 

Próbując wykonać wyjście gcc, z ./helloworld.o Powroty:

-bash: ./helloworld.o: Permission denied 

Właśnie przez wzgląd na debugowania, jeśli mogę wykonać z sudo (sudo ./helloworld.o), zwraca:

sudo: ./helloworld.o: command not found 

teraz, gdy próbuję ustawić flagę wykonywalny korzystając chmod +x helloworld.o, jak zalecono w wielu wyszukiwania R YNIKI Znalazłem, ls -l Powroty:

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 

jednak, próbując wykonać z ./helloworld.o teraz powraca:

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

Teraz do debugowania sake, where gcc Powroty:

/usr/bin/gcc 

Tak , widzisz, że nie używam strony trzeciej gcc.

Czy ktoś wie, co może być przyczyną problemu? Próbowałem już szukać, ale nie znalazłem żadnych działających rozwiązań. Miałem ten sam problem wcześniej i od tamtej pory ponownie zainstalowałem system OS X (z różnych powodów) i nadal mam ten problem z czystym i zorganizowanym środowiskiem programistycznym. Dla porównania pracuję w systemie OS X 10.8.2 i mam Xcode 4.6 wraz z najnowszą wersją narzędzi Xcode Command Line (od strony dewelopera Apple'a). Nie zainstalowałem gcc z Homebrew lub z żadnego innego źródła zewnętrznego; jest to gcc dostarczany z narzędziami Xcode Command Line.

Dziękuję bardzo za pomoc! Naprawdę doceniam, że poświęciłeś swój czas na przeczytanie, zdiagnozowanie i zaoferowanie swojej pomocy. :)

+0

Miałem ten problem, gdy zrobiłem foobar gdzie foobar.c miał błąd. Kiedy naprawiłem błąd, zadziałało. – quantumpotato

Odpowiedz

10

Próbujesz wykonać kod obiektowy (helloworld.o) zamiast kompilować i łączyć wykonywalny plik binarny. Nie używaj opcji -c. Uruchom zamiast tego:

$ gcc helloworld.c -o helloworld 

Zostanie utworzony z uprawnieniami do wykonywania. Następnie możesz uciekać.

$ ./helloworld 

jak zwykle.


Powodem tego jest to, że opcja -c informuje kompilator tylko skompilować plik, ale nie Link to. Proces łączenia jest potrzebny do utworzenia końcowego pliku wykonywalnego. Jeśli nie podasz -c, gcc będzie kompilował i łączył cię za kulisami.

+0

To jest dokładnie to! Dziękuję Ci bardzo! Zaznaczę twoją odpowiedź jako odpowiedź, gdy tylko system na to pozwoli. :) –

+0

@MichaelI: nie ma problemu, to było dobre pytanie! – teppic

Powiązane problemy