比特幣原始碼研讀(二)之搭環境遇到的那些坑
首先說一下度《精通比特幣》是一直不理解的一個地方:
上面兩處被圈起來的地方都提到了一個數字2256,特別是第一句話更是讓人費解,如果私鑰只能在1到2256間產生那豈不是太容易重複了。關於這點,我認為是在翻譯或者排版是出現了錯誤,2256應該是想表達2的256次方的意思。後續翻看其它資料是也證實了我的想法。
現在說說搭環境遇到的問題.
一、源的問題
我是在docker下進行的原始碼安裝,使用官方的Ubuntu16.04映象,許多標準系統裡的工具映象中是沒有的。對於源我還是比較習慣使用阿里雲,這裡把設定貼出來:
1、備份sources.list
cp /etc/apt/sources.list /etc/apt/sources.list_backup
2、更改源,vim /etc/apt/sources.list,內容如下:
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial universe deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties deb http://archive.canonical.com/ubuntu xenial partner deb-src http://archive.canonical.com/ubuntu xenial partner deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
3、記得更新源,不更新資料來源是不能用的
apt-get update
二、安裝add-apt-repository
編譯原始碼需依賴於libdb4.8-dev,文件要求使用“add-apt-repository ppa:bitcoin/bitcoin”來新增repository,之後在能夠安裝libdb4.8-dev,系統中沒有add-apt-repository,安裝方法如下:
apt-get install python-software-properties
apt-get install software-properties-common
三、安裝hexdump
這個工具應該是系統自帶的,但不知到為什麼我用的官方映象中沒有,安裝方法如下:
apt-get install bsdmainutils
四、安裝pkg-config
apt-get install pkg-config
五、編譯
安裝完上面這些後使用./configure --without-gui就可以生辰Makefile檔案了。--without-gui是使用使用者介面,因為我用的是docker 所以就把這個選項加上了。
make的時候會報錯:“rpcrawtransaction.cpp:299:77: required from here /usr/include/boost/variant/get.hpp:178:5: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' BOOST_STATIC_ASSERT_MSG( ^ Makefile:838: recipe for target 'rpcrawtransaction.o' failed”
解決方法如下:
找報錯檔案rpcrawtransaction.cpp的299行:
將
const CScriptID& hash = boost::get<const CScriptID&>(address);
修改為:
const CScriptID& hash = boost::get<CScriptID>(address);
即可。