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

时间:2013-03-13 21:28:34

标签: c xcode macos gcc permission-denied

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

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

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

#include <stdio.h>

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

现在,我将其保存到我的桌面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 Command Line工具(来自Apple的开发人员网站)。我没有从Homebrew或任何其他第三方来源安装gcc;它是Xcode命令行工具附带的gcc。

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

1 个答案:

答案 0 :(得分:12)

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

$ gcc helloworld.c -o helloworld

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

$ ./helloworld

正常。

<小时/> 原因是-c选项告诉编译器只是编译文件,而不是链接它。需要链接过程来创建最终的可执行文件。如果您不提供-c,gcc将在幕后为您编译和链接。