当前位置: 首页 > article >正文

Ubuntu 下同名文件替换后编译链接到旧内容的现象分析

Ubuntu 下同名文件替换后编译链接到旧内容的现象分析

在使用 Ubuntu 操作系统编译程序时,常常会遇到一个问题:当我们替换同名文件内容后,若不改变当前命令行目录,再次编译时,系统实际编译的仍是被覆盖前的旧文件内容。

复现

假设我们在/home/user/project目录下有一个main.c文件,对其进行编译后得到可执行文件。此时,我们在不退出当前目录的情况下,重新创建一个同名(project)的main.c文件并写入标记内容,再次执行编译命令,却发现运行结果依旧是基于旧文件(project_org)的,新的内容似乎“失效”。

原理

这一现象主要由编译缓存和文件系统延迟两方面原因导致。

  1. 编译缓存:许多编译工具为了提高编译效率,会缓存之前编译过的文件信息。当再次对同名文件执行编译时,若编译系统检测到文件名称、路径未变,可能直接使用缓存中旧文件的相关数据,而不会重新读取磁盘上的文件内容。

  2. 文件系统延迟:文件系统在处理文件替换操作时,存在一定的延迟。当新文件覆盖旧文件后,文件系统的元数据更新以及将新文件内容完整呈现给其他程序(如编译系统)需要一定时间。在这段时间内,编译系统读取到的仍然是旧文件的状态信息,从而导致编译出错 。

方法

  1. 重启编译环境:关闭当前的编译终端,重新打开并进入目录执行编译命令,强制系统重新读取文件内容。

  2. 更改文件或目录:对文件进行重命名或切换到其他目录后再执行编译,让编译系统意识到文件状态发生变化,重新读取文件。

http://www.lryc.cn/news/2393207.html

相关文章:

  • 【Linux网络篇】:简单的TCP网络程序编写以及相关内容的扩展
  • 22.代理模式:思考与解读
  • Scratch节日 | 粽子收集
  • stl三角面元文件转颗粒VTK文件
  • Java String的使用续 -- StringBuilder类和StringBuffer
  • Android学习之定时任务
  • WEB安全--RCE--webshell HIDS bypass4
  • 基于python+Django+Mysql的校园二手交易市场
  • 从零打造算法题刷题助手:Agent搭建保姆级攻略
  • Oracle 12c新增的数字转换验证VALIDATE_CONVERSION函数
  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • 懒人云电脑方案:飞牛NAS远程唤醒 + 节点小宝一键唤醒、远程控制Windows!
  • 【Python】第一弹:对 Python 的认知
  • 直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
  • Java源码中有哪些细节可以参考?(持续更新)
  • GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作
  • day 23 机器学习管道(pipeline)
  • shell编程笔记
  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • opencvsharp usb摄像头录像 c# H264编码
  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例