Compiler construction 使用相同的源代码、编译器和库版本进行编译会产生完全相同的二进制文件吗
我想知道如果我使用以下方法编译,是否会得到完全相同的二进制结果:Compiler construction 使用相同的源代码、编译器和库版本进行编译会产生完全相同的二进制文件吗,compiler-construction,build,build-process,Compiler Construction,Build,Build Process,我想知道如果我使用以下方法编译,是否会得到完全相同的二进制结果: 相同的源代码 相同的编译器、版本、命令 同一个图书馆 或者是否存在其他可能导致不同二进制文件的约束,例如: 编译源代码的时间 系统,内核版本 其他构建工具 谢谢大家! 不能保证仅仅通过修复代码、库和编译器就能获得相同的输出。正如您所确定的,运行编译器的环境可能会产生影响: 它不仅仅是一个编译器,而是一个保持静态的完整工具链(链接器、汇编程序等) 工具链是否使用可能随时间更新的动态库 环境变量呢 您是否以同一用户的身份运行?拥
- 编译源代码的时间
- 系统,内核版本
- 其他构建工具
谢谢大家! 不能保证仅仅通过修复代码、库和编译器就能获得相同的输出。正如您所确定的,运行编译器的环境可能会产生影响:
- 它不仅仅是一个编译器,而是一个保持静态的完整工具链(链接器、汇编程序等)
- 工具链是否使用可能随时间更新的动态库
- 环境变量呢
- 您是否以同一用户的身份运行?拥有同样的特权
不可以。编译器可能会在文件中写入时间/日期戳。通过使用基于随机化的优化,它还可能产生与代码生成不同的结果。可以构建确定性编译器;只是不要期望你必须是那样的人。