Ubuntu

如何在 Linux 中從原始碼建構比特幣?

  • February 19, 2014

我正在執行一個 Ubuntu Virtualbox,我如何從原始碼建構比特幣並在這個環境中執行它?

我正在使用來自比特幣核心 github 的建構說明,但在嘗試執行此操作時出現以下錯誤make -f makefile.unix bitcoind

net.cpp:48:15: error: 'pnodeLocalHost' was declared 'extern' and later 'static'
net.h:476:15: error: previous declaration of 'pnodeLocalHost'
net.cpp:51:15: error: 'hListenSocket' was declared 'extern' and later 'static'
net.h:479:15: error: previous declaration of 'hListenSocket'
make: *** [obj/nogui/net.o] Error 1

有關如何解決此問題的任何建議?

我嘗試在 net.h 中註釋掉這些程式碼行,現在我得到:

db.cpp:534: undefined reference to 'AddAddress(CAddress, long long)'
net.cpp:1363: undefined reference to 'AddAddress(CAddress, long long)'
main.cpp:1914: undefined reference to 'AddAddress(CAddress, long long)'
init.cpp:493:  undefined reference to 'AddAddress(CAddress, long long)'

這可能是我安裝的庫的問題嗎?我幾乎一字不差地跟著文件。

基本上,你這樣做:

  1. 下載分發包或儲存庫。您可以使用項目GitHub頁面上的連結。
  2. 如果您使用分發 tarball,請將其解壓縮。
  3. 獲得任何需要的先決條件。您可能需要的東西包括以下開發包或原始碼建構:OpenSSL、Boost、libZ、GLib2 和 BerkeleyDB。您應該能夠將您的發行版的開發包用於除 OpenSSL 之外的所有內容。我不知道 Ubuntu 是否發布了可以與比特幣客戶端一起使用的版本(包括 ECDSA 支持)。如果沒有,請使用預設選項從原始碼重建 OpenSSL。
  4. 製作提供的 UNIX makefile(稱為makefile.unix)的副本並呼叫它Makefile
  5. 根據需要調整Makefile您創建的。您可能需要: 如果先決條件不在通常的位置,則為先決條件添加包含/庫路徑。本地化 BerkeleyDB 發行版的名稱,例如“db_cxx-5.1”而不是“db_cxx”。本地化一些 Boost 庫的名稱(在某些發行版上,大多數都需要在末尾添加“-mt”)。
  6. 鍵入“make”並希望最好。
  7. 如果它不起作用,找出原因並修復它。

一個警告:如果兩個版本的比特幣客戶端連結到不同版本的 BerkeleyDB 包,它們可能無法讀取彼此的數據庫文件(包括wallet.dat文件)。有一個轉換文件的過程(在一個版本上轉儲為文本,在另一個版本上從文本建構),但它既麻煩又危險。

更新:對於您的兩個具體問題,修復方法是刪除(或註釋掉)net.h文件中的第 476 和 479 行externpnodeLocalHost以及hListenSocket. (小心,當你刪除一個時,另一個的行號可能會改變。在你做任何一個之前確定這兩個更改。)

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