1

次のコードをコンパイルしているときに、異常なコンパイル時エラーが発生しました。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    if (open("b.txt", O_CREAT | O_RDWR | O_TRUNC, 0777) < 0) {
        perror("open error:");
        exit(1);
    }
    return 0;
}

を含まないディレクトリ内b.txt
以下はエラーです:

test.c:1:0: fatal error: can’t open /tmp/ccrlx6NY.s for writing: Permission denied
compilation terminated.
The bug is not reproducible, so it is likely a hardware or OS problem.

GNU/Linux (3.2.0-39-generic)オペレーティング システムとgccコンパイラ バージョン 4.6.3 を使用しています。

$df
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5       44240004  10753148  31239588  26% /
udev             1004132         4   1004128   1% /dev
tmpfs             406548      1228    405320   1% /run
none                5120         0      5120   0% /run/lock
none             1016364       236   1016128   1% /run/shm
/dev/sda7       80731936  47718056  28912916  63% /home

このメッセージが表示される正確な理由は何ですか?

PS: コンパイルするすべてのファイルで実際にこのエラーが発生しています。

4

4 に答える 4

3

TMPDIR-environment変数を使用して、別のtmp-dirを強制してみてください。

mkdir ~/tmp
export TMPDIR=~/tmp
gcc test.c -o mytest

umask-valueを確認してください。試す

umask 022

そして、コンパイル呼び出しを再度呼び出します。

于 2013-03-22T07:39:51.297 に答える
0

/tmp への書き込み権限がありません。chmod するか、管理者に /tmp の権限を変更するよう依頼してください。

于 2013-03-22T07:22:41.153 に答える
0

/tmpディレクトリへの書き込みアクセス権があることを確認してください。また、満杯でないことも確認してください (ただし、エラー メッセージが表示されている可能性は低いです)。

/tmp/ccrlx6NY.s手作業で作成できますか?

于 2013-03-22T07:14:14.233 に答える
0

gcc の C コンパイラは、アセンブラーに渡される一時ファイル (拡張子は .s) に書き込まれるアセンブリを出力します。ここで問題が発生したのは、/tmp への書き込み権限がないため、これらのファイルを書き込むことができないことです。

TMPDIR環境変数を使用して、gcc が一時ファイルの保存に使用するディレクトリを指定できます。

于 2013-03-22T07:16:56.137 に答える