在OS X(10.8.2)Mountain Lion上执行任何gcc编译的c程序时出现“Permission denied”错误。

10
执行任何我用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以及来自Apple开发者网站的最新版本的Xcode命令行工具。我未安装Homebrew或其他第三方来源的gcc;它是随Xcode命令行工具一起提供的gcc。 非常感谢您的帮助!我真的很感激您抽出时间阅读、诊断并提供帮助。 :)

我在编译 foobar 时遇到了问题,因为 foobar.c 文件中有一个错误。当我修正了这个错误之后,它就能正常工作了。 - quantumpotato
1个回答

18

你试图执行目标代码(helloworld.o),而不是编译和链接可执行二进制文件。不要使用-c选项。请改用以下命令:

$ gcc helloworld.c -o helloworld

它将被创建为可执行权限。然后你可以运行。

$ ./helloworld
这是因为选项-c只编译文件,而不链接文件。链接过程需要创建最终的可执行文件。如果您没有提供-c,GCC会在幕后同时为您编译和链接。

像往常一样。



这就是答案!非常感谢!一旦系统允许,我会将您的回复标记为答案。 :) - Michael I

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接