Bitcoind

如何編譯比特幣核心使其更便攜?

  • June 6, 2020

背景:我在一個系統上編譯 bitcoind,但在另一個系統上執行它。當我使用以下方法編譯 bitcoind 0.19.1 時,我能夠在目標系統上執行 bitcoind 和 bitcoin-cli 而沒有問題

./autogen.sh
./configure --disable-wallet --disable-tests --disable-bench --disable-gui --enable-util-tx=no --prefix=$HOME/bitcoind/x64 --exec-prefix=$HOME/bitcoind/x64
make && make install

今天我用同樣的方法編譯了v0.20.0。如果我在系統上執行 ./bitcoind -version 我編譯了二進製文件,它執行良好,但如果我將二進製文件帶到我的目標系統,我會收到以下錯誤:

./bitcoind: error while loading shared libraries: libboost_filesystem.so.1.67.0: cannot open shared object file: No such file or directory

上次二進製文件似乎是可移植的,我從比特幣核心團隊下載的預編譯二進製文件執行良好。

請注意,在目標系統上libboost-filesystem-devlibboost-filesystem1.67-dev沒有安裝,這可能是我的錯誤的來源。也就是說,執行 Core 團隊的預編譯二進製文件,那我為什麼不執行呢?

有人可以幫助我了解我是否做錯了什麼,或者我是否需要添加 ./configure 標誌以使二進製文件更具可移植性?具體來說,與使我的二進製文件在他們工作的地方失敗的核心開發人員相比,我可能做了什麼不同的事情?

編輯 1:執行./configure --enable-static./configure LDFLAGS=-static不產生可移植二進製文件。

另請注意,使用 apt 安裝 libboost-filesystem 庫確實可以修復該錯誤。

預設情況下,您建構的二進製文件是動態連結的。這意味著他們使用安裝在您電腦上標準搜尋路徑中的庫。您想要的是一個靜態連結的二進製文件,其中這些庫與二進製文件一起打包。

比特幣核心通過使用“依賴”系統來實現這一點。可以在此處windows 交叉編譯文件中找到相關文件

基本上,你cd進入depends目錄,make在那裡執行,然後回到根目錄,你配置並指向依賴系統產生的配置東西,當你編譯時make,它將使用依賴系統中建構的庫並成為靜態連結。

例如,您可以執行以下命令:

cd depends
make HOST=x86_64-pc-linux-gnu
cd ..
./autogen.sh
CONFIG_SITE=$PWD/depends/x86_64-pc-linux-gnu/share/config.site ./configure --prefix=/
make

x86_64-pc-linux-gnu是您要為其建構二進製文件的平台。依賴系統將在其中創建一個depends/具有該名稱的目錄。該目錄包含依賴系統的建構結果。

生成的二進製文件應該是可移植的。

引用自:https://bitcoin.stackexchange.com/questions/96312