我得到了不寻常的编译时错误,而我正在编译以下代码:
#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:我现在实际上在我编译的每个文件上都出现了这个错误。
答案 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中的权限。