Kiedy buduję projekt przy użyciu kompilatora C++, czy mogę się upewnić, że wygenerowany plik binarny nie zostanie zmieniony, jeśli nie wystąpiły żadne zmiany w kodzie źródłowym? Wygląda na to, że za każdym razem, gdy przekompiluję moje źródło, wpływa to na sumę kontrolną md5 binarnej. Czy czas kompilacji w jakiś sposób wpływa na produkowany plik binarny? Jak mogę uzyskać powtarzalne wyniki kompilacji?Powtarzalne generowanie kodu obiektowego C++
Odpowiedz
Użyj inkrementalnego systemu kompilacji - takiego jak make
, aby zapewnić, że nie przekompilujesz kodu, jeśli źródło się nie zmieni.
Możliwe, że twój kompilator będzie mógł tworzyć identyczne pliki binarne z tego samego źródła - lub może nie - zależy to od kompilatora. Większość osadzi aktualny czas w wygenerowanym binarnie gdzieś.
przyrostowe kompilacje mogą dołączać dodatkowe dane do plików obiektów, co spowoduje różnice. Zamiast tego możesz użyć nie przyrostowej kompilacji, która za każdym razem buduje od zera. Sprawdź ten artykuł MS: http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx – tguclu
@tguclu To jest inne znaczenie przyrostowe niż moje. Według mojej definicji przyrostowy system kompilacji nie ma znaczenia dla obiektów wyjściowych: są one odbudowywane tylko wtedy, gdy zmieniają się ich źródła. –
Podejrzewam, że będzie w dużym stopniu zależał od twojego toolchain i systemu operacyjnego. Na przykład, jeśli jeden z nagłówków plików wykonywalnych zawiera sygnaturę czasową, to zawsze znajdziesz wynik MD5, który jest inny.
Jaki jest końcowy rezultat, który próbujesz osiągnąć (np. Dlaczego tak ważne jest, że są identyczne) ...?
Szukam odpowiedzi głównie w Visual Studio i Xcode/gcc. Odbudowujemy nasz produkt na co dzień. Chciałbym rzetelnie dowiedzieć się, jakie biblioteki DLL zmieniły się między dwiema kompilacjami. Czy mogę to zrobić, ustawiając niektóre flagi w kompilatorze/łączniku, aby nie używać informacji o znacznikach czasu podczas generowania plików binarnych? – user70336
Nie tak daleko, jak wiem. – Sean
Można demontować pliki binarne i uruchomić MD5 na wyjściu
przykład na MacOSX
otool -tV a.out | md5
ee2e724434a89fce96aa6b48621f7220
Ale jeden zdobywa się na danych globalnych ... (może być parametrem zawierać zbyt)
ja odpowiadając na problemie md5 sprawdzania binarny ... jak zarządzać źródła i systemu budowania jak inni napisali o to również rzeczą patrzeć
Nie można wykonać porównania sumy kontrolnej md5 w studiu graficznym. W przypadku zwykłego pliku .exe wersji Release z Visual Studio będą trzy lokalizacje, które zmieniają się z każdym rekompilacją. 2 z nich to sygnatury czasowe, a trzecia to unikalny identyfikator GUID używany przez studio graficzne w celu dopasowania wersji pliku .exe do plików pomocniczych w celu zapewnienia ich synchronizacji.
Możliwe jest napisanie narzędzia, które wyzeruje 3 zmienne pola, ale nie jestem pewien, jak łatwo byłoby przeanalizować plik.
Ponadto, jeśli wywołasz jakiekolwiek pliki .dll, jeśli dobrze pamiętam, otrzymasz bardziej unikalne identyfikatory w wygenerowanym pliku.
Wersja debugowania to inna historia. Myślę, że istnieje wiele, wiele więcej różnic.
- 1. Generowanie kodu HDF5 C
- 2. Generowanie kodu LLVM C++ API jako backendu
- 3. Zintegruj generowanie kodu z eclipse C++ build
- 4. Generowanie wywoływania wykresu dla kodu C++
- 5. Automatyczne generowanie kodu dla mostu od Objective C do C++
- 6. Generowanie kodu w Maven
- 7. powtarzalne sekwencje F #
- 8. Logika programowania obiektowego
- 9. Vim - Jak stworzyć powtarzalne mapowanie?
- 10. Powtarzalne kompilacje w pythonie
- 11. Powtarzalne kompilacje z tego samego kodu źródłowego C# na różnych maszynach
- 12. Różne generowanie kodu Enum HashCode?
- 13. Generowanie kodu Scala z Antlr
- 14. Generowanie diagramów dla kodu Haskella
- 15. Generowanie kodu przy użyciu .net
- 16. Generowanie kodu semantycznego z roslyn
- 17. generowanie kodu Emmet z HTML
- 18. Generowanie kodu za pomocą Scala
- 19. Generowanie kodu QR w szynach
- 20. Generowanie kodu SCons i VariantDir
- 21. Generowanie kodu binarnego (biblioteki współdzielonej) z osadzonego LLVM w C++
- 22. Generowanie i analizowanie kodu w języku Python z aplikacji C#
- 23. Generowanie kodu C# z Roslyn i .NET Core
- 24. Pytanie dotyczące projektu obiektowego
- 25. Generowanie kodu podczas kompilacji przy użyciu skryptów
- 26. Generowanie kodu równoległego Cuda w Visual Studio
- 27. Narzędzie do generowania kodu C#
- 28. Generowanie przezroczystego PNG C#
- 29. Powtarzalne zderzenia id na obiektach Pythona
- 30. CSV do mapowania modelu obiektowego
Może to, czego potrzebujesz, to lepszy sposób na śledzenie wersji oprócz md5 pliku binarnego? –
Do czego jest to potrzebne? – jalf