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 环境变量强制另一个 tmp-dir:

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

并检查您的 umask 值。尝试

umask 022

并再次调用您的编译调用。

于 2013-03-22T07:39:51.297 回答
0

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

你可以/tmp/ccrlx6NY.s手工创作吗?

于 2013-03-22T07:14:14.233 回答
0

gcc 的 C 编译器输出程序集,该程序集被写入传递给汇编程序的临时文件(扩展名为 .s)。这里出现的问题是您没有对 /tmp 的写入权限,因此它无法写入这些文件。

TMPDIR您可以通过环境变量指定 gcc 使用哪个目录来存储临时文件。

于 2013-03-22T07:16:56.137 回答
0

您没有写入 /tmp 的权限。chmod 或要求管理员更改 /tmp 中的权限。

于 2013-03-22T07:22:41.153 回答