期望在两个相同平台上构建两个共享库是否合理?

Is it reasonable to expect two shared libraries built on two identical platforms?

本文关键字:两个 是否 共享 期望 平台 构建      更新时间:2023-10-16

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

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

这背后的上下文是我的代码具有"未定义的行为",它"适用于"一种配置而不是另一种配置,显而易见的答案是解决这个问题,但我有兴趣知道我生成的二进制文件的假设是否相同是正确的。

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

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

您还忽略了编译器标志(例如,来自命令行的优化和#define)。

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

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

相关文章: