“无法打开/tmp/ccRBTake.s进行编写”,同时使用gcc进行编译

时间:2013-03-22 07:12:12

标签: c unix

我得到了不寻常的编译时错误,而我正在编译以下代码:

#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 个答案:

答案 0 :(得分:2)

尝试使用TMPDIR环境变量强制另一个tmp-dir:

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

并检查你的umask值。尝试

umask 022

再次调用您的编译调用。

答案 1 :(得分:0)

检查您是否具有/tmp目录的写入权限。还要检查它是否已满(尽管不太可能给出错误消息)。

您是否可以手动创建/tmp/ccrlx6NY.s

答案 2 :(得分:0)

gcc的C编译器输出程序集,它被写入一个传递给汇编程序的临时文件(扩展名为.s)。这里出了什么问题,你没有对/ tmp的写权限,所以它不能写这些文件。

您可以通过TMPDIR环境变量指定gcc用于存储临时文件的目录。

答案 3 :(得分:0)

您无权写入/ tmp。要么chmod它要么管理员改变/ tmp中的权限。