美文网首页
编译器的编译一致性问题

编译器的编译一致性问题

作者: Little熊猫 | 来源:发表于2019-12-26 18:54 被阅读0次

    一概述

    什么是编译器的一致性问题? 比如相同的代码,在不同的时间或者机器编译,编译选项不变,得到的二进制是一致的,这个就是编译器的一致性。

    二 一致性影响条件

    如果要保持编译器编译的一致性,如下几点需要考虑:
    1) 时间戳使用:DATE, TIME, TIMESTAMP 宏,杜绝此类宏的使用编译参数添加-Werror=date-time,使用后编译会报错,如果依赖的第三方库使用的话,可以使用“-Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= ”使其失效。
    2) 绝对路径的使用: FILE 宏,clang中这个宏往往跟编译时clang指定的路径有关,比如clang -c /absolute/path/to/my/file.cc,得到的是绝对路劲,如果要使用相对路径的话,传递给clang的参数要使用绝对路径。

    三 常见问题

    在elf中有“.note.gnu.build-id”,如果代码有变化的话“.note.gnu.build-id”字段的内容肯定会变化。
    下面这两个宏使得依赖文件使用相对路径
    "-no-canonical-prefixes",
    "-fno-canonical-system-headers",

    相关文章

      网友评论

          本文标题:编译器的编译一致性问题

          本文链接:https://www.haomeiwen.com/subject/oduloctx.html