【发布时间】:2012-01-17 06:34:32
【问题描述】:
我正在使用 qcc 在“IBM Rational Rhapsody 7.5”中构建一个共享对象项目,而 qcc 又使用 gcc。
当在具有完全相同构建环境的两台不同机器上构建相同的代码时,会观察到二进制不匹配。
经过一些试验和错误方法后,我观察到不匹配是由于用于有条件执行代码的预处理器指令(使用#ifdef)造成的。当预处理器指令被删除并且项目在不同的机器上构建时.这两个二进制文件完全匹配。
“为什么会发生这种不匹配”是否有任何原因?
预处理器指令是否在目标文件中添加与机器相关的参数,因此它们会反映在可执行文件中,从而导致不匹配? 请指导我。
【问题讨论】:
-
#ifdef块内的代码是什么?在不知道的情况下,不可能说出问题所在。 -
指令测试什么符号?
-
两个环境之间肯定存在一些差异,可能是 CPU 类型、操作系统版本、内核版本、编译器版本或其他。你应该仔细检查一下。