相同的源,但编译的二进制文件不同

发布于 2024-10-21 17:49:27 字数 454 浏览 4 评论 0原文

你好 我使用ccarm编译器在WinXP上为VxWorks开发C/C++。我想在很久以前构建的已发布交付的基础上添加一个热修复。来源保存在 Clear Case 中,并且每次交付都贴有标签。因此可以访问某个交付的源代码。

为了确保原始发布版本没有任何更改,我必须确保可以再次构建相同的输出文件。

问题就在这里;我从 CC 服务器检索源代码并构建它们。然后我将输出文件与相应的发布输出进行比较(输出文件的类型为 *.lad 文件 + 文件格式 elf32-littlearm)。而且差异是巨大的(不是一些时间戳)。另一方面,我也比较了程序集列表,它们也不同。

您知道什么会导致这种差异吗? 在我看来,可能导致这种差异的项目列表 -发布的输出是使用自动构建脚本在不同的 PC(再次是 WinXP)上构建的。新的输出是使用相同的编译器和设置在我的本地构建的。 -从存储库中检索到错误的标签,

需要添加什么吗?

提前致谢

Hi
I develop C/C++ for VxWorks on WinXP using ccarm compiler. And I would like to add a hot fix for on top of a released delivery which was build long time ago. Sources are kept on Clear Case and every delivery is labeled. So it's possible to access the source codes of a certain delivery.

In order to be sure of nothing is changed from the original released version I must make sure that I can build same output file again.

Here is the problem; I retrieve the sources from CC server and build them. Then I compare the output file to corresponding release output(output file is of type *.lad file + file format elf32-littlearm). And the difference is huge (not some time stamps).On the other hand I also compare assembly listings and they are different too.

Do you have any idea what can causes such a difference ?
In my opinion list of items which can cause such a difference
-Released output was build on a different PC (WinXP again) with auto build script.New output is build on my local with the same compiler and settings.
-Retrieved wrong label from repository

any thing to add ?

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

佞臣 2024-10-28 17:49:27

您可以使用 readelf 或 objdump 来获取二进制文件的一些详细信息,包括符号列表。

通过比较两者,也许可以找出差异的原因。

如果您以前从未使用过 readelf 或 objdump,您可以在网上找到大量文章和文档。

但是,如果您使用相同的标签、相同的工具链(和相同的选项),则输出没有理由不同。

You could use readelf or objdump to get some details on your binarie files, including a list of symbols.

By comparing the two you can maybe find out the cause of the differences.

If you have never used readelf or objdump before, you can find plenty of articles and documentation online.

But if you are using the same label, with the same toolchain (and the same options) there is no reason for the output to be different.

冰之心 2024-10-28 17:49:27

你好
我在网上的搜索表明二进制可重复性与增量构建问题有关。

如果您的构建系统配置为非增量,则一切都是从头开始构建的。使用此配置,即使两次连续构建也会在输出映像和 asm 列表中产生巨大差异。 (我使用 objdump -d 来获取 asm 列表)

但是如果使用增量构建,尽管输出图像仍然存在巨大差异,asm 列表只有 1-2 行差异。

我的策略将依靠 CM 工具和标签。但我会事先检查一下readelf。
谢谢

Hi
My search over net shows that binary reproducibility is related to incremental build issue.

If your build system is configured to non-incremental , everything is build from scratch. With this configuration even two successive builds yields huge differences in output image and asm listing. (I use objdump -d to get asm listing)

But if incremental build is used altough output image has still huge differences,asm listing has only 1-2 lines of difference.

My strategy will be counting on CM tool&labels. But I'll check readelf beforehand.
Thanks

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文