Compiling
為什麼編譯的二進製文件仍然需要 libdb、BerkeleyDB 等?
在安裝了所有必要的依賴項(包括所有 libboost 和 BerkeleyDB)之後,我在一個 Raspberry Pi 上從原始碼編譯了比特幣核心。該應用程序執行良好,並且
bitcoind
快樂地生活在/usr/local/bin
因此,我嘗試
bitcoind
將該目錄中的其他比特幣執行檔複製到執行全新乾淨作業系統的全新 Raspberry Pi 中,但應用程序無法執行。在我在第二台電腦上安裝 libboost 和 BerkeleyDB 以及所有其他依賴項之前,我遇到了錯誤。我以為編譯過程做成了一個獨立的可執行程序?為什麼編譯後的二進製文件仍然需要這些共享庫?
例如,執行檔可以從真正獨立的 bitcoin.org 下載。如何從原始碼編譯像這些獨立的執行檔?
標準編譯過程不會在執行檔中靜態“包含”依賴項。指已安裝的libdb、boost等。
這(動態連結庫)是一個有效的概念。否則,每個使用 boost 的執行檔都需要在二進製文件中包含整個 boost 依賴項。
通過 bitcoin.org 提供的“官方”比特幣核心二進製文件是靜態編譯的執行檔(它們包括所有內容)。這是獲得 linux/發行版獨立性以及完全建構二進制確定性(安全性/完整性)所必需的。
您可以按照“依賴”建構過程自己建構靜態連結的比特幣: https ://github.com/bitcoin/bitcoin/tree/master/depends