首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

Makefile 编译编到一半死机,继续编是否安全?

  •  
  •   bluesky139 · 66 天前 · 1964 次点击
    这是一个创建于 66 天前的主题,其中的信息可能已经有所发展或是发生改变。

    make 在用 gcc/g++ 生成 obj 的时候是否会考虑这种情况?

    生成的 obj 不完整,但下次因为已经生成了,timestamp 也对,就直接跳过了?

    第 1 条附言  ·  66 天前
    结果后面确实遇到了问题,链接的时候有些引用找不到,后来手动删了部分 obj 重新编译解决问题。
    17 回复  |  直到 2018-12-14 12:30:34 +08:00
        1
    gaby2018   66 天前
    不安全,老老实实重新来过。
        2
    BBge   66 天前 via Android
    make clean 以后重新编译吧
        3
    bluesky139   66 天前
    @gaby2018
    @BBge
    这。。
    这么广泛使用的工具居然不考虑这种情况。
    小工程我倒觉得随便 clean 都无所谓,大工程 clean 一次后要编好久。
        4
    rochek   66 天前
    可以继续编,可能会出错
    关键是不清脆死机的时候到底发生了什么
        5
    gaby2018   66 天前
    @bluesky139 那你按照时间列一下 obj,把死机前几分钟的 obj 干掉。
        6
    kiwi95   66 天前 via Android
    继续编能链接能 load 就没问题
        7
    zst   66 天前 via Android
    😂借个楼问下 bazel 编译的断了能继续吗......破电脑重来一次要好久
        8
    besto   66 天前
    我想了想, 这个问题应该不是 make 的锅, 而是文件系统的锅. 如果 gcc 产生 obj 已经写到磁盘上, 但是没有做 sync, 这时候死机导致 obj 不完整, make 不应该背这个锅.
        9
    bluesky139   66 天前 via Android
    @gaby2018 这个方法看起来确实可以。
        10
    TommyLemon   66 天前
    先备份数据,最好再拷到其它磁盘或外接存储。
    如果还不放心,可以再备份系统。
    然后关机重启、清除缓存重试。
        11
    bluesky139   66 天前 via Android
    @besto 这是一种情况。
    假使 gcc 本身正在写,然而没写完就死机了,我想到的是这种,我一般写文件都会用临时文件保证文件的完整性,写完再重命名。
    唉,感觉可能的情况好多。
        12
    msg7086   66 天前
    这么广泛使用的工具为什么要去考虑死机的问题?
    死机以后还可能搞坏你的文件系统呢。

    正常电脑运行时是不会随便死机的,特别是 Linux/Unix 这些稳如狗的系统,稳定版连续开机 10 年都不一定会死机。
    你电脑要是死机了,不去关心一下是不是哪个硬件出问题了吗?

    哦对了,obj 文件是编译器生成的,和 make 没有毛线关系。
        13
    wwqgtxx   66 天前 via iPhone
    就像人在胚胎期也没考虑过脐带断了会怎么样😂
        14
    atempcode   66 天前
    这情况,真正要去解决的是“生成的 obj 不完整”的问题吧
        15
    standin000   66 天前
    @bluesky139 你可以在 Makefile 里写 gcc 编译到临时文件再重命名的规则,make 是个执行规则的软件,Makefile 是程序员自己负责的。
        16
    likuku   66 天前 via iPhone
    这么在意“复用”的话,可以了解下 编译(缓存)加速工具,经常用到的通用类库什么的,obj 可以被缓存在硬盘上,大幅度节省时间。

    本地的 ccache 和 分布式的 distcc ( 16 节点以内,几乎是随着节点数线性提高编译速度,当然可以和 ccache 搭配使用,要求最好所有节点的 os 版本,编译工具链版本,glibc 版本 都一样,稍微不同也可以)

    以前玩 Gentoo 时,为了提高编译全系统提速,用过五六个物理机节点玩 ccache + distcc 的确能快上 3 ~ 4 倍
        17
    julyclyde   65 天前
    timestamp 不该正确的啊
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   760 人在线   最高记录 4346   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 22:49 · PVG 06:49 · LAX 14:49 · JFK 17:49
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1