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

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

  •  
  •   bluesky139 ·
    bluesky139 · 2018-12-13 15:24:48 +08:00 · 5673 次点击
    这是一个创建于 2170 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    以前玩 Gentoo 时,为了提高编译全系统提速,用过五六个物理机节点玩 ccache + distcc 的确能快上 3 ~ 4 倍
    julyclyde
        17
    julyclyde  
       2018-12-14 12:30:34 +08:00
    timestamp 不该正确的啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2491 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:53 · PVG 23:53 · LAX 07:53 · JFK 10:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.