如何在windows平台下编译比特币bitcoin客户端

来自技术流笔记
跳转至: 导航搜索

很多朋友都知道如何在linux平台如何编译比特币程序,但是,到了windows平台,就会感觉到无从下手。其实,比特币程序是跨平台的。你要编译windows版的比特币程序,基本上有两种方法,一种是在linux平台(推荐ubuntu 13.10)通过交叉编译的方法来编译,另外一种就是直接在windows平台编译。

下面就详细介绍一下如何在windwows平台编译比特币程序。

平台:windows7

第一步:安装变编译环境QT和MINGW,msys

1、msys是一个在windows平台模拟shell的程序。

访问http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download 下载安装程序之后,通过安装管理程序,按安装以下内容: From MinGW installation manager -> All packages -> MSYS 选中以下安装包

msys-base-bin
msys-autoconf-bin
msys-automake-bin
msys-libtool-bin

点 apply changes开始安装。他会自动下载安装好。 需要注意的是,确保不要安装msys-gcc和msys-w32api ,因为这两个包和我们的编译系统发生冲突。 很多人出现一些莫名其妙的问题,就是因为这两个包。 2、安装 MinGW-builds

访问

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

下载并解压缩 i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z 到C盘根目录 C:\ ,使得目录名为C:\mingw32 注意我的目录结构。你尽量和我一样。

3、设置PATH环境变量,将C:\mingw32\bin;添加到第一个。这里是MinGW-builds的目录,不是MinGW的目录,由于本人查看原博客时候,已经没有了截图,开始还设置错误了。现在特意强调一下,其他人不要再搞错了。 4、在命令行模式下输入 gc -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

等待几分钟后,就把openssl编译好了。

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

等待编译

2.3 安装Boost,下载地址: http://sourceforge.net/projects/boost/files/boost/1.55.0/ 解压到deps目录,然后再命令终端执行下面的代码,注意,这里不是msys命令了。 另外这里有个最大的坑,就是系统需要VC++的一些环境,原博主可能平时电脑上已经安装过,所以没有提及,其实这里需要先安装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; 配置完毕后,运行下面的命令:

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

2.4 安装Miniupnpc 下载地址: http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.tar.gz 从下面的代码格式也可以看出,这里依然是终端命令,不是msys的。

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

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

cd /c/deps/libpng-1.6.10
configure --disable-shared
make

下载 http://fukuchi.org/works/qrencode/qrencode-3.4.3.tar.gz ode:

cd /c/deps/qrencode-3.4.3

LIBS="../libpng-1.6.10/.libs/libpng16.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

2.7 安装 Qt 5 库 下载和解压缩 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

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/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/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图形界面的钱包软件)

用户讨论留言:

用户留言

--Admin讨论) 2017年12月23日 (六) 03:45 (CST)

用户留言: 主机配置,停留在2.2步骤,

checking whether the C compiler works... rm: cannot lstat `conftest.exe': Permission denied
yes
checking for C compiler default output file name... a.exe
rm: cannot lstat `conftest.exe': Permission denied
checking for suffix of executables... configure: error: in `/c/deps/db-4.8.30.NC/build_unix':
configure: error: cannot compute suffix of executables: cannot compile and link
See `config.log' for more details.

用户留言

--Admin讨论) 2017年12月23日 (六) 04:01 (CST)

用户留言: 虚拟机环境到了2.3步骤,但是这里应该有错,应该是命令行处执行代码,而不是msys处。再就是这里可能会出现找不到cl命令和vcvars32.bat文件,于是安装vc++6.0,添加C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin;到path系统变量。 依然错误,提示

Building Boost.Build engine
系统找不到指定的批处理标签 - Test_Option

Failed to build Boost.Build engine.
Please consult bootstrap.log for furter diagnostics.

You can try to obtain a prebuilt binary from

   http://sf.net/project/showfiles.php?group_id=7586&package_id=72941

Also, you can file an issue at http://svn.boost.org
Please attach bootstrap.log in that case.

网上有说安装vs2010,设置了两个环境变量,分别是C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE;不知道是不是可以变。

用户留言(Admin建立于2017年12月23日)

配置个环境都这么难。不是高手怎么完成呢? --Admin讨论) 2017年12月23日 (六) 04:02 (CST)

用户留言(Admin建立于2017年12月23日)

checking for zlibVersion in -lz... no
checking for z_zlibVersion in -lz... no
configure: error: zlib not installed

上面的应该直接在 mingw中安装libz,开始就应该了选中了

--Admin讨论) 2017年12月23日 (六) 18:03 (CST)

用户留言(Admin建立于2017年12月23日)

$ make
make  all-am
make[1]: Entering directory `/c/deps/libpng-1.6.10'
depbase=`echo png.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/sh ./libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.     -g -O2 -MT png.lo -
MD -MP -MF $depbase.Tpo -c -o png.lo png.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -g -O2 -MT png.lo -MD -MP -MF .deps/png.Tpo -c png.c -o p
ng.o
In file included from pngpriv.h:72:0,
from png.c:14:
pnglibconf.h:199:54: error: expected identifier or '(' before '-' token
0
^
In file included from png.h:462:0,
from pngpriv.h:290,
from png.c:14:
pngconf.h:544:9: error: unknown type name 'ptrdiff_t'
typedef ptrdiff_t png_ptrdiff_t;
^2017年12月23日 (六) 18:44 (CST)[[用户:Admin|Admin]]([[用户讨论:Admin|讨论]])
In file included from png.c:14:0:
pngpriv.h:816:21: error: operator '!=' has no left operand
#if PNG_ZLIB_VERNUM != 0 && PNG_ZLIB_VERNUM != ZLIB_VERNUM
^~
make[1]: *** [png.lo] Error 1
make[1]: Leaving directory `/c/deps/libpng-1.6.10'
make: *** [all] Error 2

纵然解决了zlib的问题,但是依旧make不成功。

我要新增留言 编辑留言