如何編譯比特幣核心使其更便攜?
背景:我在一個系統上編譯 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-dev
並libboost-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/
具有該名稱的目錄。該目錄包含依賴系統的建構結果。生成的二進製文件應該是可移植的。