我在一個非常規範的環境中工作,我們需要能夠生成相同的二進制輸入,並在每次構建產品時提供相同的源代碼。我們目前使用古代版本的g ++,它已經被修補爲不會在生成的二進制文件中寫入任何類似日期/時間的文件,但是我會更新到g ++ 4.7.2。有沒有人知道一個補丁,或者有什麼我需要尋找採取兩個相同的源代碼段併產生相同的二進制輸出的建議?如何用g ++生成確定性二進制輸出?
11
A
回答
6
我們也依賴於位相同的重建,並且正在使用gcc-4.7.x。
除了設置PWD=/proc/self/cwd
和使用-frandom-seed=<input-file-name>
,還有一些補丁,可以在svn://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7
分支中找到。
5
Debian Reproducible builds project試圖逐個字節地對Debian軟件包進行標準化,最近得到了Linux Foundation grant。
雖然這可能不僅僅是編譯,還應該看看它。
它還指出我this article,它增加了以下幾點到什麼@Employed說:
- 把源在一個固定的文件夾(例如,
/tmp/build
)來處理__FILE__
- 爲
__DATE__
,__TIME__
,__TIMESTAMP__
:- libfaketime:https://github.com/wolfcw/libfaketime
- 倍率噸軟管宏指令
-D
-Wdate-time
或-Werror=date-time
:如果使用__TIME__
,__DATE__
或__TIMESTAMP__
,則發出警告或失敗。 Linux內核4.4默認使用它。
- 使用
D
國旗ar
,或使用https://github.com/nh2/ar-timestamp-wiper/tree/master擦拭郵票 -fno-guess-branch-probability
:older manual versions說,這是不確定性,但not anymore的來源。不知道這是否覆蓋-frandom-seed
或不。
Buildroot有BR2_REPRODUCIBLE
選項,它可能會在包裝上水平的一些想法,但還遠遠沒有完成,在這一點上。
相關主題:
相關問題
- 1. 集成兩個時間序列以生成二進制輸出
- 2. 二進制文件生成性能
- 3. 生成二進制到二進制時出錯
- 4. 確定二進制兼容性linux下
- 5. 如何生成二進制文件? C#
- 6. 如何生成二進制powersets?
- 7. 輸出流response.redirect二進制
- 8. 生成二進制列出總和給定數目
- 9. 二進制輸出C++
- 10. M4二進制輸出
- 11. 如何讀取輸出FORTRAN二進制NxNxN矩陣成Python
- 12. 如何確定二進制字符串的統計隨機性?
- 13. 如何在C#/ .NET中捕獲二進制輸出輸出
- 14. 二進制輸入輸出問題
- 15. 限制二進制輸出爲8位
- 16. Verilog輸入和二進制輸出
- 17. 如何使用GDB正確調試`go test -c`生成的二進制文件?
- 18. C++中的二進制輸入/輸出
- 19. 二進制列出奇怪的輸出
- 20. g ++不會生成任何文件或提供任何輸出
- 21. 如何強制doxygen生成確定性的,可讀的URL?
- 22. 如何檢查使用哪種編譯器生成二進制
- 23. cocs2dx生成二進制黑莓Momentics ide
- 24. 隨機二進制生成器(不僞)
- 25. 使用進程生成器重定向進程輸出
- 26. Visual Studio生成的二進制文件
- 27. 如何確定以下十六進制的輸出
- 28. RESTful生成二進制文件
- 29. 在java中設置二進制輸出的精確位數
- 30. 生成所有二進制組合C++
是什麼PWD =的/ proc /自/ CWD嗎? –
@StevenBehnke我們用調試信息構建。在Linux上,GCC將'PWD'(shell設置爲當前工作目錄)記錄爲當前編譯目錄。由於無論構建執行到哪個目錄,我們都希望構建的代碼是相同的,因此我們將'PWD'設置爲可預測的值。 –
隨機性在GCC中的主要應用是什麼? –