2013-03-13 9 views
6

gccでコンパイルしたCプログラムを実行すると、パーミッションが拒否されました。OS X(10.8.2)で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 

I次いで(Iも同じ結果と-oフラグなしでコンパイルしようとした)gcc -c helloworld.c -o helloworldとコンパイル。警告やエラーはありません。 ls -lは今返す:./helloworld.o戻って、GCCの出力を実行しようとすると

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 

:私はsudoの(sudo ./helloworld.o)で実行した場合だけ、デバッグのために

-bash: ./helloworld.o: Permission denied 

を、それが返されます。

さて、検索rの多くで推奨されていたとして、私は、 chmod +x helloworld.oを使用して、実行可能フラグを設定しようとすると、
sudo: ./helloworld.o: command not found 

私が見つけたesults、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コマンドラインツールの最新バージョン(Appleの開発者Webサイトから)と一緒にXcode 4.6を持っています。私はHomebrewや他のサードパーティのソースからgccをインストールしていません。それはXcodeのコマンドラインツールに付属しているgccです。

ありがとうございました!私は本当にあなたの時間をかけて読んで、診断し、助けていただき、ありがとうございます。 :)

+0

foobar.cにエラーがあったfoobarを作成したときにこの問題が発生しました。エラーを修正すると、うまくいきました。 – quantumpotato

答えて

10

実行可能なバイナリをコンパイルしてリンクするのではなく、オブジェクトコード(helloworld.o)を実行しようとしています。 -cオプションは使用しないでください。これを代わりに実行してください:

$ gcc helloworld.c -o helloworld 

実行可能な権限で作成されます。その後、実行することができます。

$ ./helloworld 

通常通り。


この理由は -cオプションがちょうど ファイルにコンパイルコンパイラに伝えることではなく、 リンクこと。最終的な実行可能ファイルを作成するには、リンク処理が必要です。 -cを指定しないとgccはあなたのためにコンパイルしてリンクします。

+0

これはまさにそれです!どうもありがとうございました!私はあなたの応答を、システムが許す限りすぐに回答としてマークします。 :) –

+0

@MichaelI:問題ない、良い質問だった! – teppic

関連する問題