gcc编译临时文件存放路径

代码编译的时候,编译服务器莫名其妙的报以下错误:

fatal error: error writing to /tmp/ccGjoKTF.s:No space left on device

奇怪了,编译脚本中并没有往tmp目录写文件呀!

仔细看了下错误信息,这个ccGjoKTF.s应该是编译过程的中间文件,其中文件名是随机值。然而makefile中并未要求保留汇编代码。

写了个demo,用strace(strace gcc test)跟踪了下,发现gcc不仅把汇编代码(.s)写到了tmp目录,也把二进制文件(.o)写到了tmp目录,并且编译完成自动删除临时文件。

如果在编译的时候使用-S或者-C选项,则会把对应的中间文件保存在当前目录,而不是tmp目录。

如果在编译的时候使用-save-temps选项,也会把中间产物保存在当前目录,并且编译完成不删除临时文件。

查资料发现原来gcc默认把编译过程中的中间文件写到tmp目录。 如果不想让gcc把中间文件写到tmp目录,可以设置环境变量TMPDIR。比如可以在makefile中设置到当前目录:

export TMPDIR=$(pwd)

至于tmp目录空间不足,ls -l 一看,竟然是有些项目的makefile写的有问题,编译完成后残留了很多文件。

参考文档: https://stackoverflow.com/questions/4874735/tmp-folder-and-gcc https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc.pdf

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能计算时代

Envoy 架构概览(1):术语,线程模型,监听器和网络(L3 / L4)过滤器和HTTP连接管理

术语 在我们深入到主要的体系结构文档之前,有一些定义。有些定义在行业中有些争议,但是它们是Envoy在整个文档和代码库中如何使用它们的,因此很快就会出现。 主机...

3543
来自专栏Vamei实验室

C编译: makefile基础

在编译一个大型项目的时候,往往有很多目标文件、库文件、头文件以及最终的可执行文件。不同的文件之间存在依赖关系(dependency)。比如当我们使用下面命令编译...

23810
来自专栏程序员互动联盟

【专业技术】如何在Linux中添加新的系统调用

系统调用是应用程序和操作系统内核之间的功能接口。其主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输入系统、文件系统和进程控制、通信以及存储管理等方...

2574
来自专栏开源优测

性能测试必备监控技能jvm之jdk命令行工具篇16

前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Pr...

29912
来自专栏源哥的专栏

客户端数据集/服务端数据集的原理和设计

最近在开发一个比较大型的项目,主要采用Activex控件做底层操作,采用Javascript做逻辑控制和处理,采用Ajax实现服务端与客户端之间的交互,而在实际...

884
来自专栏决胜机器学习

Redis专题(十二) ——Redis特殊情况处理机制

Redis专题(十二) ——Redis特殊情况处理机制 (原创内容,转载请注明来源,谢谢) 一、内存淘汰 当redis的内存不足时,需要采取内存淘汰的方法,...

3608
来自专栏北京马哥教育

[干货]varnish原理|杨过同学

Varnish是一款高性能的开源HTTP加速器(其实就是带缓存的反向代理服务),可以把http响应内容缓存到内存或文件中,从而提高web服务器响应速度。与传统的...

2966
来自专栏码洞

徒手教你使用zookeeper编写服务发现

zookeeper的内部是一个key/value存储引擎,key是以树状的形式构成了一个多级的层次结构,每一个节点既可以存储数据,又可以作为一个目录存放下一级子...

1141
来自专栏xingoo, 一个梦想做发明家的程序员

图解Tomcat类加载机制

  说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷。   之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,...

3388
来自专栏Vamei实验室

来玩Play框架01 简介

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

1572

扫码关注云+社区

领取腾讯云代金券