You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora27下Bazel编译C++示例报错:无法创建临时文件求助

解决Fedora 27上Bazel编译时「Failed to create temporary file」错误

我之前在Fedora系统折腾Bazel的时候也碰到过几乎一模一样的问题,试了几个方法才搞定,给你列几个针对性的排查方向:

  • 手动指定Bazel临时目录
    系统默认的/tmp目录有时候会因为权限、tmpfs空间或者SELinux限制出问题。你可以给自己建一个专属的临时目录,让Bazel用这个目录来生成临时文件:

    1. 先创建目录:mkdir -p ~/bazel_temp
    2. 编译时指定临时目录:export TMPDIR=~/bazel_temp && bazel build //main:hello-world
      要是管用的话,把export TMPDIR=~/bazel_temp加到你的~/.bashrc或者~/.zshrc里,以后就不用每次手动输了。
  • 检查系统/tmp目录的状态
    Fedora的/tmp默认是tmpfs挂载的,先确认它的权限和剩余空间:

    • 查看权限:ls -ld /tmp,正常应该显示drwxrwxrwt,保证所有用户都有读写执行的权限
    • 查看剩余空间:df -h /tmp,如果空间不够,清理掉/tmp里的过期文件,或者修改/etc/fstab里的tmpfs条目,增大size参数(比如改成tmpfs /tmp tmpfs defaults,size=4G 0 0)
  • 排查ccache的问题
    你提到修改了/.ccache/tmp的权限,但根目录下的.ccache普通用户本来就没权限写啊!应该是用户家目录下的~/.ccache才对。先试试禁用ccache编译,看是不是它的问题:
    bazel build --action_env=CCACHE_DISABLE=1 //main:hello-world
    如果能成功,那就是ccache的锅:

    1. 清空ccache缓存:ccache -C
    2. 确保家目录下的ccache目录权限正确:chown -R $USER:$USER ~/.ccache
  • 检查SELinux的限制
    Fedora默认开着SELinux,很可能它阻止了Bazel创建临时文件。先临时关闭SELinux测试:
    sudo setenforce 0
    然后再跑编译命令,如果成功了,就说明是SELinux策略的问题。可以给Bazel添加对应的SELinux规则:

    1. 生成规则文件:sudo ausearch -c 'bazel' --raw | sudo audit2allow -M my-bazel
    2. 加载规则:sudo semodule -i my-bazel.pp
      之后再把SELinux开回去:sudo setenforce 1
  • 尝试升级或重新安装Bazel
    要是上面的方法都不管用,可能是你用的Bazel版本和Fedora 27兼容性不好。试试用Fedora的包管理器安装Bazel:
    sudo dnf install bazel
    或者去Bazel官方下载适配Fedora 27的特定版本,替换掉当前的Bazel二进制。

内容的提问来源于stack exchange,提问作者modkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:02:47