在我工作的公司中,有一个复杂的工业 ARM 架构路由器项目,主要由许多带有 Linux 内核的 C 和 C++ 应用程序组成。目前我们正在准备认证和认证组织希望我们向他们发送所有源文件和生成的根文件系统映像的二进制校验和。当然,我们发送给他们的校验和和他们在构建后将获得的图像校验和应该是相同的。
我尝试在同一主机上连续构建相同的应用程序(我选择了busybox)两次,并得到了两个不同的校验和。我尝试使用答案https://superuser.com/a/1092566/851200(-frandom-seed=123
作为编译标志传递)来解决它 - 没有帮助。
如果我可以在同一主机上两次使用相同的校验和构建相同的应用程序 - 我认为问题实际上将得到解决,因为我们可以对认证组织说“在 Ubuntu 18.04.3 上使用 GCC 7.5.0-3ubuntu1~18.04 和 ARM GNUEABI GCC 构建软件4.8.5 从我们提供给您的资源等构建”和基础软件将是相同的,并且在相同的系统案例上构建将是相同的。但也许我错过了什么。
有人可以帮助我吗?
更新:
我试图查看使用生成的二进制文件有什么不同,arm-linux-gnueabi-readelf -a
并在同一台机器上为busybox获得了以下两个顺序构建的差异:
--- a 2020-03-24 16:17:51.901192012 +0500
+++ b 2020-03-24 16:18:47.152671408 +0500
@@ -1404,7 +1404,7 @@
Displaying notes found at file offset 0x00000168 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_BUILD_ID (unique build ID bitstring)
- Build ID: ecc0ddee1a1f50c9b4ac98477be7ba55
+ Build ID: edab8a4ee42f8fd0e4ee7e931639f226
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5TE"
然后我检查了 GCC 手册页并查看If style is omitted, "sha1" is used ... The "md5" and "sha1" styles produces an identifier that is always the same in an identical output file
. 所以默认值应该没问题并且产生相同Build ID
的,但事实并非如此。