Linux 编译过程中遇到 TMPDIR 空间不足的问题
在 Linux 编译过程中遇到 TMPDIR
空间不足的问题,主要是因为编译过程会生成大量临时文件(如目标文件、预处理文件等),当默认临时目录(通常是 /tmp
)或自定义的 TMPDIR
所在磁盘空间不足时就会报错。以下是具体的解决方法:
一、临时解决:更换临时目录
如果当前 TMPDIR
指向的目录空间不足,可以临时指定一个有足够空间的目录作为临时目录:
-
创建新的临时目录(选择空间充足的分区,例如
/home
下):mkdir -p /home/new_tmp # 创建新目录 chmod 777 /home/new_tmp # 赋予读写权限(确保编译用户有权限)
-
临时设置
TMPDIR
(仅在当前终端生效):export TMPDIR=/home/new_tmp
-
重新执行编译命令:
例如make
或cmake
等,此时编译产生的临时文件会写入新目录。
二、永久解决:修改默认临时目录
若频繁遇到空间不足问题,可将 TMPDIR
永久设置为空间充足的目录:
-
编辑环境变量配置文件(根据shell类型选择,以
bash
为例):vim ~/.bashrc # 对当前用户生效 # 或 sudo vim /etc/profile # 对所有用户生效
-
添加
TMPDIR
配置:
在文件末尾添加:export TMPDIR=/home/new_tmp # 替换为实际的充足空间目录
-
生效配置:
source ~/.bashrc # 或 source /etc/profile
三、清理现有临时文件释放空间
如果不想更换目录,可清理当前临时目录的冗余文件释放空间:
-
查看临时目录占用情况:
du -sh $TMPDIR # 查看当前TMPDIR占用空间 # 若未设置TMPDIR,查看默认/tmp: du -sh /tmp
-
清理过期临时文件:
- 手动删除不再需要的临时文件(注意:不要删除正在使用的文件):
rm -rf $TMPDIR/* # 谨慎操作!确保没有正在运行的程序使用这些文件
- 或使用系统工具清理(如
tmpwatch
,自动删除指定时间未使用的文件):# 删除/tmp下7天未使用的文件(需要root权限) sudo tmpwatch 168 /tmp
- 手动删除不再需要的临时文件(注意:不要删除正在使用的文件):
四、其他注意事项
-
确认磁盘空间:
使用df -h
查看各分区空间,确保目标临时目录所在分区有足够空间(建议预留至少几个GB,视编译项目大小而定)。 -
编译大项目的优化:
- 对于大型项目(如内核、Qt等),建议将临时目录设置在空间较大的分区。
- 可通过
make -j
控制并行编译的线程数,减少同时生成的临时文件数量(例如make -j4
限制为4线程)。
-
权限问题:
确保新临时目录对编译用户有读写权限(chmod 755
或777
,根据实际需求设置)。
通过以上方法,可有效解决编译过程中因 TMPDIR
空间不足导致的错误。核心思路是:要么清理现有空间,要么将临时文件指向更充足的存储空间。