9

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

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

为了说明和隔离问题,我将向您展示这个超简单的 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.onow 返回:

-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 的开发人员网站)。我没有从 Homebrew 或任何其他第三方来源安装 gcc;它是 Xcode 命令行工具附带的 gcc。

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

4

1 回答 1

17

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

$ gcc helloworld.c -o helloworld

它将使用可执行权限创建。然后就可以运行了。

$ ./helloworld

像平常一样。


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

于 2013-03-13T21:31:26.497 回答