Разрешение отказано в выполнении любой GCC-скомпилированной программы c на OS X (10.8.2) Mountain Lion

при выполнении любой программы C, которую я скомпилировал с gcc из терминала я получаю ошибку отказа в разрешении.

чтобы начать, я проверил и отремонтировал разрешения на моем диске (прежде чем делать это, та же проблема происходила).

чтобы проиллюстрировать и изолировать проблему, я покажу вам, что происходит с этой ультра-простой программой Hello World (с другими программами происходит то же самое):

#include <stdio.h>

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

теперь я сохраняю это на своем рабочем столе as helloworld.c. На данный момент, с рабочего стола,ls -l возвращает:

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

затем я компилирую с gcc -c helloworld.c -o helloworld (Я также пробовал компиляцию без -o флаг с теми же результатами). Никаких предупреждений или ошибок. Ан ls -l теперь возвращает:

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

попытка выполнить вывод gcc с помощью ./helloworld.o возвращает:

-bash: ./helloworld.o: Permission denied

просто для отладки, если я выполняю с sudo (sudo ./helloworld.o), она возвращает:

sudo: ./helloworld.o: command not found

теперь, если я попытка установить флаг исполняемого файла с помощью chmod +x helloworld.o, как было рекомендовано по многим результатам поиска, которые я нашел,ls -l возвращает:

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

однако, попытка выполнить с ./helloworld.o теперь возвращает:

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

теперь, ради отладки, where gcc возвращает:

/usr/bin/gcc

Итак, вы можете видеть, что я не использую третью сторону gcc.

кто-нибудь знает в чем может быть проблема? Я пытался найти что-нибудь, но не смог. рабочий раствор. У меня была такая же проблема раньше и с тех пор недавно переустановил OS X (по разным причинам), и у меня все еще есть эта проблема с чистой и организованной средой разработки. Для справки, я на OS X 10.8.2 и имею Xcode 4.6 вместе с последней версией инструментов командной строки Xcode (с веб-сайта разработчика Apple). Я не установил gcc из Homebrew или из любого другого стороннего источника; это gcc, который поставляется с командной строкой Xcode инструменты.

большое спасибо за вашу помощь! Я очень ценю, что вы не торопитесь читать, диагностировать и предлагать свою помощь. :)

1 ответов


вы пытаетесь выполнить объектный код (helloworld.o) вместо компиляции и связывания исполняемого двоичного файла. Не используйте . Запустите вместо этого:

$ gcc helloworld.c -o helloworld

Он будет создан исполняемый файл с разрешениями. Затем вы можете бежать.

$ ./helloworld

как обычно.


Причина этого в том, что -c опция сообщает компилятору только compile файл, а не ссылке его. Процесс связи необходимо создать окончательный исполняемый файл. Если вы не поставляете -c, gcc будет компилировать и связывать вас за кулисами.