1、比特币 0.9.2 中文版编译手册日期:2014-07-01构建比特币源码,是一件十分费时费力的工作,尤其在 windows 系统中编译比特币源码更加的麻烦,经过一两天努力,终于在 windows7 64 位系统中成功编译出了比特币源文件。现在总结如下,首先准备一套干净的 windows7 64 位操作系统,最好是使用 vbox 或者vmware 虚拟机建立一个专用系统,这样的可以防止其它干扰导至编译失败,接下来说说,我的编译过程:1.安装 msys 系统msys 作用是在 windows 系统中重建 linux 系统编译环境,在 msys 系统下操作,就像linux 中的操作一样,具有相同的
2、语法命令。从下面的网址中下载 msys 最新版:http:/ mingw-get-setup.exe 文件后,选择安装目录为 H:MinGW,之后软件会首先更新下载库,更新成功会弹出一个窗口 MinGW installation manager,在这个窗口中,只下载 msys 相关的包文件,不要下载 mingw 相关文件,因为不使用它带的这个 mingw。主要如下面所示:msys-base-binmsys-autoconf-binmsys-automake-binmsys-libtool-bin选择好之后,点击 Installation-Apply changes 即可。一定要确保 mingw
3、 包没有被下载,这里我们只需要 msys 相关系统,也要确保 msys-gcc 和 msys-w32api 等包没有被下载,否则当我们执行编译时,可能会调用这些不该出现的包文件,而导至编译失败。2.安装 perl 系统由于在编译比特币时,需要调用一些 perl 脚本,所以从下面的网址中下载一个 perl 安装程序,然后安装即可。http:/ python同样还需要用到 python 环境,这里下载最新版的 pytnon3.4.0 版,并安装它。在安装时,注意选择 add python to path.https:/www.python.org/ftp/python/3.4.0/python-3
4、.4.0.amd64.msi4.安装 MinGW下载安装最新版的 mingw 4.9.0 版本,i686-4.9.0-release-posix-dwarf-rt_v3-rev2.7z 通过下面的网址可以下载:http:/ mingw 包中文件全部解压到 H 盘的 mingw32 目录内,你可根据自己的需要解压到合适位置。安装后应该如下图所示:5.设置环境变量在桌面上,鼠标右键计算机图标,在弹出菜单中选择属性,在弹出窗口中,在左侧边栏中,选择高级系统设置,接着选择高级选项卡中的环境变量按钮,在弹出窗口中,将系统变量中的 path,添加 H:mingw32bin,而 perl 和 python
5、安装后,会自动进行设置变量,如果没有,也应添加进来,如下面所示:H:MinGW32bin;C:Python34;C:Python34Scripts;D:Perl64sitebin;D:Perl64bin;6.检测编译环境是否正确首先检查 H:MinGWbin 目录中,确保目录中只有一个 mingw-get.exe 文件。然后运行控制台 cmd,在命令行中输入 gcc -v,将会看到如下面所示,则环境正确:7.下载并编译相关文件包本文中,将用到所有相关文件包,都下载到了 H:deps 目录中了,所以在接下来的编译过程中,将围绕这个目录。7.1 OpenSSL: http:/www.openssl
6、.org/source/openssl-1.0.1h.tar.gz启动 msys(h:MinGWmsys1.0msys.bat) ,然后使用下面的命令解压并编译 OpenSSL文件。cd /h/deps/tar xvfz openssl-1.0.1h.tar.gzcd openssl-1.0.1hConfigure no-shared no-dso mingwmake可以上将面的文件包存为 openssl.sh 文件,然后 msys 中直接运行这个文件即可。在这里要注意的是,也不知道什么原因,有时候使用这种脚本方式运行时,会发现命令处理到一半时,就提前退出了,我在我电脑中发现,经常不会运行最后
7、 make 命令,如果你发现脚本没有 make 时,可以直接继续输入 make 即可。编译完成后,将会如下图所法界面所示:7.2 Berkeley DB: http:/ db-4.8.30.NC.tar.gz 版本,其它版本不一定能用,依然是从 msys中进行编译 DB 数据库,命令如下所示:cd /h/deps/tar xvfz db-4.8.30.NC.tar.gzcd db-4.8.30.NC/build_unix./dist/configure -enable-mingw -enable-cxx -disable-shared -disable-replicationmake7.3 B
8、oost: http:/ boost 1.55.0,下载之后,将文件解压到 H:depsboost_1_55_0 内。然后启动 windows 命令控制台 cmd,然后使用下面的命令进行编译,请注意下面的 b2 命令是一行命令(不要在 msys 中运行下面的命令,否则不能成功,boost 编译时间较长):cd h:depsboost_1_55_0bootstrap.bat mingwb2 -build-type=complete -with-chrono -with-filesystem -with-program_options -with-system -with-thread tools
9、et=gcc variant=release link=static threading=multi runtime-link=static stageb2 命令中设置,会将 boost 的编译结果复制到 h:depsboost_1_55_0stage 内。7.4 Miniupnpc:http:/miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.tar.gz先在 msys 系统中,使用 tar 命令解压 miniupnpc-1.9.tar.gz,命令如下:cd /h/deps/tar xvfz miniupnpc-1.9.tar.gz
10、将解压出来的 miniupnpc-1.9 文件夹,重新命名为 minupnpc,接着在 windows 命令控制台 cmd 中,编译 miniupnpc,命令如下所示:cd h:depsminiupnpcmingw32-make -f Makefile.mingw init upnpc-static7.5 protoc 和 libprotobuf :http:/ winrar 或者 7zip 将它解压,然后接着在 msys 中执行下面的命令,编译它们:cd /h/deps/protobuf-2.5.0configure -disable-sharedmake7.6 libpng: http:/
11、 msys 中编译 ligpng,命令如下所示:cd /c/deps/libpng-1.6.12configure -disable-sharedmakecp .libs/libpng16.a .libs/libpng.a7.7 qrencode: http:/fukuchi.org/works/qrencode/qrencode-3.4.3.tar.gz在编译 qrencode 时会用到 libpng 库,所以编译命令如下所示:tar xvfz qrencode-3.4.3.tar.gzcd /h/deps/qrencode-3.4.3LIBS=“./libpng-1.6.12/.libs/
12、libpng.a ././mingw32/i686-w64-mingw32/lib/libz.a“ png_CFLAGS=“-I./libpng-1.6.12“ png_LIBS=“-L./libpng-1.6.12/.libs“ configure -enable-static -disable-shared -without-toolsmake7.8 Qt 5.3.0 编译这里要注意的是,由于比特币源码要求必须使用 SSL 和 Zlib 支持,所以只能下载 QT源码,重新编译 QT。下载地址如下所示:Qt 基础包:http:/download.qt-project.org/official
13、_releases/qt/5.3/5.3.0/submodules/qtbase-opensource-src-5.3.0.7zQT 工具包: http:/download.qt-project.org/official_releases/qt/5.3/5.3.0/submodules/qttools-opensource-src-5.3.0.7z将 QT 基础包解压到 h:Qt5.3.1 目录中,将 QT 工具包解压到 h:Qtqttools-opensource-src-5.3.1。然后在 windows 控制台 CMD 中执行下面命令:set INCLUDE=c:depslibpng-1
14、.6.10;h:depsopenssl-1.0.1gincludeset LIB=c:depslibpng-1.6.10.libs;h:depsopenssl-1.0.1gcd c:Qt5.2.1configure.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 -opens
15、sl-linked -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debugmingw32-makeset PATH=%PATH%;c:Qt5.2.1bincd c:Qtqttools-opensource-src-5.2.1qmake qttools.promingw32-make在这里,我将上面的命令保存为了一个批处理文件,但是当我执行这个批处理时,发现并没有时执行最后的 mingw32-make 任务,只是进行了 configure 操作后就停止了,所以如果在你电脑上也是这种情况的话,可以分别进入 H:Qt5.2.1 和 H:Qtq
16、ttools-opensource-src-5.2.1 目录内,重新执行 mingw32-make 命令各一次。8.编译比特币源码:下载比特币最新版源码包:https:/ H:bitcoin-0.9.2 目录内,然后在 msys 中运行下面的命令表:cp /h/deps/libpng-1.6.10/.libs/libpng16.a /h/deps/libpng-1.6.10/.libs/libpng.acd /h/bitcoin-0.9.1./autogen.shCPPFLAGS=“-I/h/deps/boost_1_55_0 -I/h/deps/db-4.8.30.NC/build_unix
17、 -I/h/deps/openssl-1.0.1g/include -I/h/deps -I/h/deps/protobuf-2.5.0/src -I/h/deps/libpng-1.6.10 -I/h/deps/qrencode-3.4.3“ LDFLAGS=“-L/h/deps/boost_1_55_0/stage/lib -L/h/deps/db-4.8.30.NC/build_unix -L/h/deps/openssl-1.0.1g -L/h/deps/miniupnpc -L/h/deps/protobuf-2.5.0/src/.libs -L/h/deps/libpng-1.6.
18、10/.libs -L/h/deps/qrencode-3.4.3/.libs“ ./configure -disable-upnp-default -disable-tests -with-qt-incdir=/h/Qt/5.2.1/include -with-qt-libdir=/h/Qt/5.2.1/lib -with-qt-bindir=/h/Qt/5.2.1/bin -with-qt-plugindir=/h/Qt/5.2.1/plugins -with-boost-system=mgw48-mt-s-1_55 -with-boost-filesystem=mgw48-mt-s-1_
19、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=/h/deps/protobuf-2.5.0/srcmakestrip src/bitcoin-cli.exestrip src/bitcoind.exestrip src/qt/bitcoin-qt.exe在编译比特币源码时,中途会提示是否删除一些中件文件,可以使用下面的补丁脚本,可以让编译器自动跳过这些提问:- Make
20、file.include Sun Mar 16 12:05:28 2014+ Makefile.include Wed Mar 26 03:05:58 2014 -40,18 +40,18 ui_%.h: %.uitest -d $(abs_builddir)/$(D) | $(MKDIR_P) $(abs_builddir)/$(D)test -f $(UIC) test -f $(RCC) & QT_SELECT=$(QT_SELECT) $(RCC) -name bitcoin -o $(abs_builddir)/$ $ | echo error: could not build $- $(SED) -i.bak -e /*.*Created:/d $ & rm $.bak- $(SED) -i.bak -e /*.*by:/d $ & rm $.bak+ $(SED) -i.bak -e /*.*Created:/d $ & rm -f $.bak+ $(SED) -i.bak -e /*.*by:/d $ & rm -f $.bakCLEANFILES = $(BUILT_SOURCES) $(QT_QM) $(QT_FORMS_H) *.gcda *.gcno