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の開発者向けWebサイトから)を使用しています。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 に答える