【问题标题】:Why xlC compiler on aix always generates different object files for the same c++ source code?为什么 aix 上的 xlC 编译器总是为相同的 c++ 源代码生成不同的目标文件?
【发布时间】:2014-01-18 11:43:20
【问题描述】:

当我在 AIX 上使用 xlC 编译器两次编译一个简单的 test.cpp 文件时:

xlC_r test.cpp -o test1
xlC_r test.cpp -o test2

那么 test1 和 test2 是不同的!他们有不同的 md5sum。

但是当我在 linux 上做同样的事情时(当然是用 g++ 而不是 xlc),那么 test1 和 test2 是一样的......

谁能告诉我为什么在 AIX 中会发生这种奇怪的行为?

谢谢

【问题讨论】:

  • 可执行文件中的日期戳?某种随机名称?您确实需要更仔细地比较实际文件(所有部分、反汇编等)
  • 也许您可以尝试对它们进行二进制差异?例如,它们可能包含某种唯一的 id,或者包含的函数的顺序可能不同

标签: c++ aix xlc


【解决方案1】:

是的,编译器会在它创建的每个目标文件中存储一个时间戳。从编译器 12.1 版本开始,可以在编译时指定选项 -qnotimestamps 以禁止存储时间戳。

【讨论】:

  • 用户正在查看最终的可执行文件。可执行格式本身也没有时间戳吗?即我认为做两个链接也会产生两个略有不同的文件。
  • 我尝试使用 -qnotimestamps 但二进制文件仍然不同
  • 尝试使用 dump 命令转储 XCOFF 可执行文件的文本版本并进行比较——应该有助于缩小差异。
【解决方案2】:

也许它在编译的程序中包含一个时间戳。您可以通过保存每个程序的八进制或十进制转储并比较结果来尝试找出它们的不同之处。许多 UNIX 变体提供了您可以使用的 oddiff 程序,但我不知道它们在 AIX 下是否可用。

【讨论】:

  • oddiff 都是 Posix,因此应该可以在任何 Unix 平台上使用(或在 Windows 下使用 CygWin)。
  • 当然可以。我只是不确定它们是始终存在还是仅在安装了某些可选软件包时才存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
相关资源
最近更新 更多