权限被拒绝在OS X(10.8.2)Mountain Lion上执行任何gcc编译的c程序

Mic*_*l I 6 c macos xcode gcc permission-denied

当执行我gcc从终端编译的任何C程序时,我得到一个权限被拒绝错误.

首先,我已经验证并修复了我的驱动器的权限(在此之前,同样的问题发生了).

为了说明和隔离问题,我将向您展示这个超简单的Hello World程序会发生什么(与其他程序一样,同样的事情发生):

#include <stdio.h>

main()
{
    printf("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

现在,我把它保存到我的桌面上helloworld.c.此时,从桌面ls -l返回:

total 8
-rw-r--r--  1 michael  staff  56 Mar 13 14:08 helloworld.c
Run Code Online (Sandbox Code Playgroud)

然后我编译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
Run Code Online (Sandbox Code Playgroud)

尝试执行gcc的输出,./helloworld.o返回:

-bash: ./helloworld.o: Permission denied
Run Code Online (Sandbox Code Playgroud)

只是为了调试,如果我用sudo(sudo ./helloworld.o)执行,它返回:

sudo: ./helloworld.o: command not found
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试设置可执行标志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
Run Code Online (Sandbox Code Playgroud)

但是,尝试使用./helloworld.onow返回:

-bash: ./helloworld.o: Malformed Mach-o file
Run Code Online (Sandbox Code Playgroud)

现在,为了调试,where gcc返回:

/usr/bin/gcc
Run Code Online (Sandbox Code Playgroud)

所以,你可以看到我没有使用第三方gcc.

有谁知道可能是什么问题?我试过四处寻找,但我找不到任何有效的解决方案.我之前遇到过同样的问题,并且已经重新安装了OS X(出于不同的原因),并且仍然在干净有序的开发环境中遇到这个问题.作为参考,我使用的是OS X 10.8.2,并且拥有Xcode 4.6以及最新版本的Xcode Command Line工具(来自Apple的开发人员网站).我没有从Homebrew或任何其他第三方来源安装gcc; 它是Xcode Command Line工具附带的gcc.

非常感谢您的帮助!我非常感谢您花时间阅读,诊断并提供帮助.:)

tep*_*pic 12

您正在尝试执行目标代码(helloworld.o),而不是编译和链接可执行二进制文件.不要使用该-c选项.改为运行:

$ gcc helloworld.c -o helloworld
Run Code Online (Sandbox Code Playgroud)

它将使用可执行权限创建.然后你就可以跑了.

$ ./helloworld
Run Code Online (Sandbox Code Playgroud)

像平常一样.


原因是该-c选项告诉编译器只编译文件,但不链接它.需要链接过程来创建最终的可执行文件.如果你不提供-c,gcc将在幕后为你编译和链接.