当我从终端执行我用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。
非常感谢你的帮助!我非常感谢您花时间阅读,诊断并提供帮助。 :)
答案 0 :(得分:12)
您正在尝试执行目标代码(helloworld.o),而不是编译和链接可执行二进制文件。不要使用-c
选项。改为运行:
$ gcc helloworld.c -o helloworld
将使用可执行权限创建它。然后你可以跑。
$ ./helloworld
正常。
<小时/> 原因是
-c
选项告诉编译器只是编译文件,而不是链接它。需要链接过程来创建最终的可执行文件。如果您不提供-c
,gcc将在幕后为您编译和链接。