Windows平台下编译比特币bitcoin客户端-修订版

来自技术流笔记
Admin讨论 | 贡献2018年1月1日 (一) 18:59的版本 (创建页面,内容为“本教程是根据网站诸多教程整理修订而来,填了一些原教程的坑,在win7虚拟机上编译成功。如果以后发现有错误的地方,还...”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

本教程是根据网站诸多教程整理修订而来,填了一些原教程的坑,在win7虚拟机上编译成功。如果以后发现有错误的地方,还会继续修改,以希望能够始终有效。


第一步:安装变编译环境QT和MINGW,msys 首先准备一套干净的windows7 64位操作系统,最好是使用vbox或者vmware虚拟机建立一个专用系统,这样的可以防止其它干扰导至编译失败,接下来说说,我的编译过程: 1.安装msys系统

msys作用是在windows系统中重建linux系统编译环境,在msys系统下操作,就像linux中的操作一样,具有相同的语法命令。从下面的网址中下载msys最新版:


http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download


然后运行mingw-get-setup.exe文件后,选择安装目录为C:\MinGW,之后软件会首先更新下载库,更新成功会弹出一个窗口MinGW installation manager,在这个窗口中,只下载下面提到的安装包,不要选择其他,否则可能冲突。

选中以下安装包

MSYS下面的: msys-base-bin msys-autoconf-bin msys-automake-bin msys-libtool-bin

ming32下面的: minGW32-libz bin minGW32-mingw-get

点 apply changes开始安装。他会自动下载安装好。

需要注意的是,确保不要安装msys-gcc和msys-w32api ,因为这两个包和我们的编译系统发生冲突。

很多人出现一些莫名其妙的问题,就是因为这两个包。 2.安装perl系统

由于在编译比特币时,需要调用一些perl脚本,所以从下面的网址中下载一个perl安装程序,然后安装即可。


http://downloads.activestate.com/ActivePerl/releases/5.18.1.1800/ActivePerl-5.18.1.1800-MSWin32-x64-297570.msi


3.安装python

同样还需要用到python环境,这里下载最新版的pytnon3.4.0版,并安装它。在安装时,注意选择add python to path.


https://www.python.org/ftp/python/3.4.0/python-3.4.0.amd64.msi

4.安装MinGW

下载安装最新版的mingw 4.9.0版本,i686-4.9.0-release-posix-dwarf-rt_v3-rev2.7z通过下面的网址可以下载:


http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.0/threads-posix/dwarf/i686-4.9.0-release-posix-dwarf-rt_v3-rev2.7z/download


将这个mingw包中文件全部解压到C盘的mingw32目录内,到C盘根目录 C:\

注意我的目录结构。你尽量和我一样。

5.设置环境变量

在桌面上,鼠标右键计算机图标,在弹出菜单中选择属性,在弹出窗口中,在左侧边栏中,选择高级系统设置,接着选择高级选项卡中的环境变量按钮,在弹出窗口中,将系统变量中的path,添加C:\mingw32\bin,而perl和python安装后,会自动进行设置变量,如果没有,也应添加进来,如下面所示:


C:\MinGW32\bin;C:\Python34\;C:\Python34\Scripts;C:\Perl64\site\bin;C:\Perl64\bin;

6.检测编译环境是否正确

首先检查H:\MinGW\bin目录中,确保目录中只有一个mingw-get.exe文件。然后运行控制台cmd,在命令行中输入gcc -v,将会看到如下面所示,则环境正确:

c:\gcc -v Using built-in specs. COLLECT_GCC=c:\mingw32\bin\gcc.exe COLLECT_LTO_WRAPPER=c:/mingw32/bin/../libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper.exe Target: i686-w64-mingw32 Configured with: ../../../src/gcc-4.8.2/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-cloog=/c/mingw482/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl --with-pkgversion='i686-posix-dwarf-rev3, Built by MinGW-W64 project' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/lib -L/c/mingw482/prerequisites/i686-zlib-static/lib -L/c/mingw482/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware' Thread model: posix gcc version 4.8.2 (i686-posix-dwarf-rev3, Built by MinGW-W64 project)

至此,你的开发环境已经搭建好了,很简单吧

第二部分:下载bitcoin引用的外部库 我们把它们全部放在 C:\deps目录下

2.1 安装OpenSSL下载:http://www.openssl.org/source/openssl-1.0.1g.tar.gz

进入启动 MinGw shell 比如目录:(C:\MinGW\msys\1.0\msys.bat)运行这个msys.bat,就会启动一个shell环境,提示符是$

输入命令 cd /c/deps/ tar xvfz openssl-1.0.1g.tar.gz cd openssl-1.0.1g Configure no-shared no-dso mingw make makeinstall


2.2 下载Berkeley DB 访问: http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz 我们推荐使用 4.8版本 同样在msys shell环境下输入以下命令 cd /c/deps/ tar xvfz db-4.8.30.NC.tar.gz cd db-4.8.30.NC/build_unix ../dist/configure --enable-mingw --enable-cxx --disable-shared --disable-replication make makeinstall


2.3 安装Boost,下载地址: http://sourceforge.net/projects/boost/files/boost/1.55.0/

(这里需要先安装VC++的。 所以安装vs2010,设置了两个环境变量到path,分别是C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE; 但是到了后面的步骤,还需要去掉,郁闷吧?)

这里使用最新版的boost 1.55.0,下载之后,将文件解压到H:\deps\boost_1_55_0内。然后启动windows命令控制台cmd,然后使用下面的命令进行编译,请注意下面的b2命令是一行命令(不要在msys中运行下面的命令,否则不能成功,boost编译时间较长):


cd C:\deps\boost_1_55_0\ bootstrap.bat mingw b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi runtime-link=static stage

b2命令中设置,会将boost的编译结果复制到h:\deps\boost_1_55_0\stage内。

2.4 安装Miniupnpc 下载地址: http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.tar.gz

先在msys系统中,使用tar命令解压miniupnpc-1.9.tar.gz,命令如下:

cd /c/deps/

tar xvfz miniupnpc-1.9.tar.gz


将解压出来的miniupnpc-1.9文件夹,重新命名为minupnpc,接着在windows命令控制台cmd中,编译miniupnpc,命令如下所示:

cd c:\deps\miniupnpc

mingw32-make -f Makefile.mingw init upnpc-static


2.5下载 protoc 和 libprotobuf: Download and unpack http://protobuf.googlecode.com/files/protobuf-2.5.0.zip

msys shell命令

cd /c/deps/protobuf-2.5.0 configure --disable-shared make makeinstall


2.6 libpng: 下载地址: http://prdownloads.sourceforge.net/libpng/libpng-1.6.10.tar.gz?download

libpng暂时使用了1.6.10,主要配置时候的参数改变) 依然是在msys中编译libpng,命令如下所示:

cd /c/deps/libpng-1.6.10 configure --disable-shared make make install cp .libs/libpng16.a .libs/libpng.a



2.6 qrencode: qrencode: http://fukuchi.org/works/qrencode/qrencode-3.4.3.tar.gz

在编译qrencode时会用到libpng库,所以编译命令如下所示:

tar xvfz qrencode-3.4.3.tar.gz

cd /h/deps/qrencode-3.4.3

LIBS="../libpng-1.6.10/.libs/libpng.a ../../mingw32/i686-w64-mingw32/lib/libz.a" \ png_CFLAGS="-I../libpng-1.6.10" \ png_LIBS="-L../libpng-1.6.10/.libs" \ configure --enable-static --disable-shared --without-tools

make

makeinstall

2.7,安装libevent 下载地址: https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz 还是解压到C盘的deps目录 然后 cd /h/deps/libevent-2.0.22-stable configure --disable-shared make make install



2.7 安装 Qt 5 库 (由于前面步骤中安装了VS2010,因此到了这一步要不path中的vs部分的去掉。) 下载和解压缩 http://download.qt-project.org/official_releases/qt/5.2/5.2.1/submodules/qtbase-opensource-src-5.2.1.7z http://download.qt-project.org/official_releases/qt/5.2/5.2.1/submodules/qttools-opensource-src-5.2.1.7z

在 windows命令行输入:

set INCLUDE=C:\deps\libpng-1.6.10;C:\deps\openssl-1.0.1g\include set LIB=C:\deps\libpng-1.6.10\.libs;C:\deps\openssl-1.0.1g

cd C:\Qt\5.2.1 configure.bat -release -opensource -confirm-license -static -make libs -no-sql-sqlite -no-opengl -system-zlib -qt-pcre -no-icu -no-gif -system-libpng -no-libjpeg -no-freetype -no-angle -no-vcproj -openssl-linked -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug

mingw32-make

set PATH=%PATH%;C:\Qt\5.2.1\bin

cd C:\Qt\qttools-opensource-src-5.2.1 qmake qttools.pro mingw32-make

上面的set PATH ,如果执行不成功,就手动添加到环境变量的path中。


8.编译比特币源码: 3. 下载Bitcoin 0.9.1 地址: https://github.com/bitcoin/bitcoin/archive/v0.9.1.zip

在msys shell下输入以下命令行:

cp /c/deps/libpng-1.6.10/.libs/libpng16.a /c/deps/libpng-1.6.10/.libs/libpng.a

cd /c/bitcoin-0.9.1

./autogen.sh

CPPFLAGS="-I/c/deps/boost_1_55_0 \ -I/c/deps/db-4.8.30.NC/build_unix \ -I/c/deps/openssl-1.0.1g/include \ -I/c/deps \ -I/c/deps/protobuf-2.5.0/src \ -I/c/deps/libpng-1.6.10 \ -I/c/deps/libevent-2.0.22-stable \ -I/c/deps/qrencode-3.4.3" \ LDFLAGS="-L/c/deps/boost_1_55_0/stage/lib \ -L/c/deps/db-4.8.30.NC/build_unix \ -L/c/deps/openssl-1.0.1g \ -L/c/deps/miniupnpc \ -L/c/deps/protobuf-2.5.0/src/.libs \ -L/c/deps/libpng-1.6.10/.libs \ -L/c/deps/libevent-2.0.22-stable/.libs \ -L/c/deps/qrencode-3.4.3/.libs" \ ./configure \ --disable-upnp-default \ --disable-tests \ --with-qt-incdir=/c/Qt/5.2.1/include \ --with-qt-libdir=/c/Qt/5.2.1/lib \ --with-qt-bindir=/c/Qt/5.2.1/bin \ --with-qt-plugindir=/c/Qt/5.2.1/plugins \ --with-boost-system=mgw48-mt-s-1_55 \ --with-boost-filesystem=mgw48-mt-s-1_55 \ --with-boost-program-options=mgw48-mt-s-1_55 \ --with-boost-thread=mgw48-mt-s-1_55 \ --with-boost-chrono=mgw48-mt-s-1_55 \ --with-protoc-bindir=/c/deps/protobuf-2.5.0/src

make

strip src/bitcoin-cli.exe strip src/bitcoind.exe strip src/qt/bitcoin-qt.exe

这样,你就得到了变异好的 bitcoin-cli.exe和bitcoind.exe ,bitcoin-qt.exe(windows QT图形界面的钱包软件)