Bitcoin编译Windows64版本。
需要使用Mingw-w64交叉编译工具。
操作系统使用的还是Ubuntu 16.04/18.04版本,最好新建一个新的目录,跟Linux版的区分开。
更新软件包
sudo apt update
sudo apt upgrade
安装依赖
比起Linux版,需要额外安装curl
,后续会用到。少了其它一些依赖,比如qt、boost等等,这些会在稍会的环节自动下载并配置。
sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl
16.04额外需要
sudo apt install software-properties-common
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu zesty universe"
sudo apt update
sudo apt upgrade
设置mingw32编译器
# Set the default mingw32 g++ compiler option to posix.
sudo update-alternatives --config x86_64-w64-mingw32-g++
在列出的选项中选择posix
的那个。
源码改动点
除了Linux的改动外,还需要
-
修改
qt.mk
源码
depends/package/qt.mk
中第三行的official_releases
为new_archive
,原因是Qt的下载路径换了。 -
chainparams.cpp
中的base58Prefixes
改为类似如下写法base58Prefixes[PUBKEY_ADDRESS] = {108}; //k base58Prefixes[SCRIPT_ADDRESS] = {125}; //s base58Prefixes[SECRET_KEY] = {128}; base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x88, 0xB2, 0x1E}; base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x88, 0xAD, 0xE4};
或者更高版本的写法
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
base58Prefixes[EXT_PUBLIC_KEY] = boost::assign::list_of(0x04)(0x35)(0x87)(0xCF).convert_to_container<std::vector<unsigned char> >();
base58Prefixes[EXT_SECRET_KEY] = boost::assign::list_of(0x04)(0x35)(0x83)(0x94).convert_to_container<std::vector<unsigned char> >();
配置和编译
# strip out problematic Windows %PATH% imported var
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g')
cd depends
make HOST=x86_64-w64-mingw32 -j4
这一步会用到curl
去fetch软件包,这一步时间会比较长,有些包需要翻墙才可以。
开始编译
# 切换到源码根目录
cd ../
./autogen.sh
./configure --prefix=`pwd`/depends/x86_64-w64-mingw32
make
编译成功后就可以在src
和src/qt
目录下找到编译好的几个exe文件,这点跟Linux版是一样的。