Der .a-Archivformat-Header benötigt einen Zeitstempel. Dies hat zu unzähligen Kopfschmerzen geführt, wenn ich eine statische Bibliothek neu erstellte, hauptsächlich weil ich die ursprüngliche Binärdatei nicht genau reproduzieren kann.
Zum Beispiel (das ist auf meinem Mac, aber das gleiche passiert in x64 Linux):
%Vor%Um mir selbst zu beweisen, dass der einzige Unterschied die Zeit war, nahm ich ein Diff auf Basis von Hexdump:
%Vor%entspricht dem Zeitfeld, wenn Sie das Header-Format verwenden.
Manpage gibt keinen Hinweis darauf, ob es möglich ist, den Zeitstempel aus der Kopfzeile zu überschreiben. Irgendwelche Gedanken?
Bearbeiten: Ja, es ist möglich, zurückzugehen und die Datei physisch zu hacken, um einen beliebigen Zeitstempel zu verwenden. Ja, es ist möglich, das Verhalten des Programms zu ändern. Angesichts der Umstände, die nicht ausschließlich technischer Natur sind, ist ein Tool zum manuellen Ändern des Zeitstempels nicht akzeptabel, ebenso wenig eine modifizierte Version von ar
, noch wird mit der tatsächlichen Systemzeit herumgespielt.
Edit: In diesem Fall muss ich beweisen, dass ohne eine inakzeptable Abweichung vom Build-Pfad, die Binärdateien von der Quelle erzeugt werden können. In einigen Branchen (z. B. Finanzen) ist dies offenbar eine Standardpraxis. Ein handgerolltes Tool zum Ändern der Zeitstempel ist inakzeptabel (weil ein spezielles Tool verwendet wurde, das nicht im ursprünglichen Buildpfad enthalten war). Eine handgerollte Version von ar
ist inakzeptabel (ähnliches Problem). Das Problem mit der Änderung der Systemuhr ist, dass der Build perfekt koordiniert werden muss (es ist eine Stunde lang Build mit einer Menge von Bibliotheken und Binärdateien). Zu den akzeptablen Lösungen gehören:
Wenn der Rest der Binärdatei immer genau gleich ist, können Sie den Zeitstempel in der .a
-Datei finden und ihn mit einem festen Wert überschreiben (wie alle Nullen).
Der .a-Archivformat-Header benötigt einen Zeitstempel. Dies hat zu unzähligen Kopfschmerzen geführt, wenn ich eine statische Bibliothek neu erstellte, hauptsächlich weil ich die ursprüngliche Binärdatei nicht genau reproduzieren kann.
Zum Beispiel (das ist auf meinem Mac, aber das gleiche passiert in x64 Linux):
%Vor%Um mir selbst zu beweisen, dass der einzige Unterschied die Zeit war, nahm ich ein Diff auf Basis von Hexdump:
%Vor%entspricht dem Zeitfeld, wenn Sie das Header-Format verwenden.
Manpage gibt keinen Hinweis darauf, ob es möglich ist, den Zeitstempel aus der Kopfzeile zu überschreiben. Irgendwelche Gedanken?
Bearbeiten: Ja, es ist möglich, zurückzugehen und die Datei physisch zu hacken, um einen beliebigen Zeitstempel zu verwenden. Ja, es ist möglich, das Verhalten des Programms zu ändern. Angesichts der Umstände, die nicht ausschließlich technischer Natur sind, ist ein Tool zum manuellen Ändern des Zeitstempels nicht akzeptabel, ebenso wenig eine modifizierte Version von ranlib
, noch wird mit der tatsächlichen Systemzeit herumgespielt.
Edit: In diesem Fall muss ich beweisen, dass ohne eine inakzeptable Abweichung vom Build-Pfad, die Binärdateien von der Quelle erzeugt werden können. In einigen Branchen (z. B. Finanzen) ist dies offenbar eine Standardpraxis. Ein handgerolltes Tool zum Ändern der Zeitstempel ist inakzeptabel (weil ein spezielles Tool verwendet wurde, das nicht im ursprünglichen Buildpfad enthalten war). Eine handgerollte Version von ranlib -D
ist inakzeptabel (ähnliches Problem). Das Problem mit der Änderung der Systemuhr ist, dass der Build perfekt koordiniert werden muss (es ist eine Stunde lang Build mit einer Menge von Bibliotheken und Binärdateien). Zu den akzeptablen Lösungen gehören:
Wenn der Rest der Binärdatei immer genau gleich ist, können Sie den Zeitstempel in der ranlib
-Datei finden und ihn mit einem festen Wert überschreiben (wie alle Nullen).
Mit dd können Sie den gewünschten Teil der Datei überschreiben:
%Vor%das bedeutet natürlich, dass Sie Ihren Zeitstempel woanders brauchen (Sie können ein sehr einfaches c-Programm haben, das die aktuelle Zeit nimmt und es in Little Endian oder Big Endian ausgibt und dann mit dd die Bibliotheksdatei überschreiben kann) . Mit dd kann ich die .a-Datei überschreiben und bekomme keine Diff-Ergebnisse
Die Standardantwort lautet "Es kann nicht vom AR-Tool ausgeführt werden"
Mit dd können Sie den gewünschten Teil der Datei überschreiben:
%Vor%das bedeutet natürlich, dass Sie Ihren Zeitstempel woanders brauchen (Sie können ein sehr einfaches c-Programm haben, das die aktuelle Zeit nimmt und es in Little Endian oder Big Endian ausgibt und dann mit dd die Bibliotheksdatei überschreiben kann) . Mit dd kann ich die .a-Datei überschreiben und bekomme keine Diff-Ergebnisse
Tags und Links c linux ar static-libraries .a