编译器的编译一致性问题

一概述

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

二 一致性影响条件

如果要保持编译器编译的一致性,如下几点需要考虑:
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",

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容