Как заставить G CC создавать контрольные суммы одинаковых сборок? - PullRequest
4 голосов
/ 20 марта 2020

В компании, где я работаю, есть сложный промышленный проект ARM arch router, состоящий в основном из множества приложений C и C ++ с ядром Linux. В настоящее время мы готовимся к сертификации, и организация сертификации хочет, чтобы мы отправили им все источники и двоичную контрольную сумму результирующего root образа файловой системы. Конечно, контрольная сумма, которую мы отправляем, и контрольная сумма изображения, которое они получат после сборки, должны быть одинаковыми.

Я попытался последовательно собрать одно и то же приложение (я выбрал busybox) дважды на одном хосте и получил две разные контрольные суммы. Я пытался решить его, используя ответ https://superuser.com/a/1092566/851200 (передать -frandom-seed=123 в качестве флага компиляции) - не помогло.

Если бы я мог создать одно приложение с одной и той же контрольной суммой дважды тот же хост - я думаю, что проблема будет практически решена, потому что мы можем сказать сертификационной организации: «Построить софт на Ubuntu 18.04.3 с G CC 7.5.0-3ubuntu1 ~ 18.04 с ARM GNUEABI G CC 4.8.5, построенный из источники, которые мы вам предоставили et c ", и базовый софт будет одинаковым, и он будет идентичен для сборки на том же системном корпусе. Но, возможно, я что-то упускаю.

Может ли кто-нибудь мне помочь?

ОБНОВЛЕНИЕ:

Я попытался увидеть, что именно отличается в результирующих двоичных файлах, используя arm-linux-gnueabi-readelf -a, и получил следующий diff для двух последовательных сборок на одном компьютере для 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"

Затем я проверил справочную страницу G CC и увидел 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, но это не так.

...