3

如果我构建相同的源代码,链接到相同版本的相同库,使用相同的工具链(相同的编译器,链接器等,GCC 4.4),使用相同版本的相同操作系统,(我的 Centos 5 Linux案例)但在两台不同的机器上;

假设生成的二进制文件应该是相同的是否合理?

这背后的背景是我的代码具有“未定义的行为”,它在一种配置上“有效”,但在另一种配置上无效,显而易见的答案是解决这个问题,但我很想知道我的假设是否生成的二进制文件应该是相同的正确的。

我注意到几百字节的大小差异,使用“nm”命令显示的符号位置略有不同,即使符号相同。

4

1 回答 1

1

通常我希望日期和/或元数据即使在同一主机上的构建之间也会略有不同。

您还忽略了提及编译器标志(#define例如命令行中的优化和 s)。

然而,我最初怀疑这些文件应该具有相同的大小,这导致我们得出结论,两个系统之间的某些东西不一样的。最有可能的候选者是系统头文件(操作系统安装中的一个根级功能可能会导致这些文件的视图完全不同)和任何依赖库。

g++ -E您可以通过使用或类似的预处理来检查标题是否相同。您还可以按照库路径并确认链接到的文件在每个系统上都是相同的。

于 2013-01-23T16:21:54.997 回答