比特币0.9.2中文版编译手册

来自技术流笔记
Admin讨论 | 贡献2017年12月31日 (日) 00:09的版本 (创建页面,内容为“构建比特币源码,是一件十分费时费力的工作,尤其在windows系统中编译比特币源码更加的麻烦,经过一两天努力,终于在windo...”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

构建比特币源码,是一件十分费时费力的工作,尤其在windows系统中编译比特币源码更加的麻烦,经过一两天努力,终于在windows7 64位系统中成功编译出了比特币源文件。现在总结如下,首先准备一套干净的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文件后,选择安装目录为H:\MinGW,之后软件会首先更新下载库,更新成功会弹出一个窗口MinGW installation manager,在这个窗口中,只下载msys相关的包文件,不要下载mingw相关文件,因为不使用它带的这个mingw。

主要如下面所示:


msys-base-bin

msys-autoconf-bin

msys-automake-bin

msys-libtool-bin


选择好之后,点击Installation->Apply changes即可。一定要确保mingw包没有被下载,这里我们只需要msys相关系统,也要确保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包中文件全部解压到H盘的mingw32目录内,你可根据自己的需要解压到合适位置。安装后应该如下图所示:



5.设置环境变量

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


H:\MinGW32\bin;C:\Python34\;C:\Python34\Scripts;D:\Perl64\site\bin;D:\Perl64\bin; 6.检测编译环境是否正确

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




7.下载并编译相关文件包

本文中,将用到所有相关文件包,都下载到了H:\deps目录中了,所以在接下来的编译过程中,将围绕这个目录。


7.1 OpenSSL: http://www.openssl.org/source/openssl-1.0.1h.tar.gz

启动msys(h:\MinGW\msys\1.0\msys.bat),然后使用下面的命令解压并编译OpenSSL文件。

cd /h/deps/

tar xvfz openssl-1.0.1h.tar.gz

cd openssl-1.0.1h

Configure no-shared no-dso mingw

make


可以上将面的文件包存为openssl.sh文件,然后msys中直接运行这个文件即可。在这里要注意的是,也不知道什么原因,有时候使用这种脚本方式运行时,会发现命令处理到一半时,就提前退出了,我在我电脑中发现,经常不会运行最后make命令,如果你发现脚本没有make时,可以直接继续输入make即可。

编译完成后,将会如下图所法界面所示:



7.2 Berkeley DB: http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz

在这里,最好是下载db-4.8.30.NC.tar.gz版本,其它版本不一定能用,依然是从msys中进行编译DB数据库,命令如下所示:


cd /h/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


7.3 Boost: http://sourceforge.net/projects/boost/files/boost/1.55.0/

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


cd h:\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内。


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


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

cd h:\deps\miniupnpc

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


7.5 protoc和libprotobuf :http://protobuf.googlecode.com/files/protobuf-2.5.0.zip

然后使用winrar或者7zip将它解压,然后接着在msys中执行下面的命令,编译它们:


cd /h/deps/protobuf-2.5.0

configure --disable-shared

make


7.6 libpng: http://prdownloads.sourceforge.net/libpng/libpng-1.6.12.tar.gz?download

依然是在msys中编译ligpng,命令如下所示:

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

cp .libs/libpng16.a .libs/libpng.a


7.7 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.12/.libs/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-tools

make


7.8 Qt 5.3.0编译

这里要注意的是,由于比特币源码要求必须使用SSL和Zlib支持,所以只能下载QT源码,重新编译QT。下载地址如下所示:

Qt基础包:http://download.qt-project.org/official_releases/qt/5.3/5.3.0/submodules/qtbase-opensource-src-5.3.0.7z

QT工具包:http://download.qt-project.org/official_releases/qt/5.3/5.3.0/submodules/qttools-opensource-src-5.3.0.7z

将QT基础包解压到h:\Qt\5.3.1目录中,将QT工具包解压到h:\Qt\qttools-opensource-src-5.3.1。然后在windows控制台CMD中执行下面命令:


set INCLUDE=c:\deps\libpng-1.6.10;h:\deps\openssl-1.0.1g\include

set LIB=c:\deps\libpng-1.6.10\.libs;h:\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


在这里,我将上面的命令保存为了一个批处理文件,但是当我执行这个批处理时,发现并没有时执行最后的mingw32-make任务,只是进行了configure操作后就停止了,所以如果在你电脑上也是这种情况的话,可以分别进入H:\Qt\5.2.1和H:\Qt\qttools-opensource-src-5.2.1目录内,重新执行mingw32-make命令各一次。


8.编译比特币源码:

下载比特币最新版源码包:https://github.com/bitcoin/bitcoin/archive/v0.9.1.zip

将源码包解压到H:\bitcoin-0.9.2目录内,然后在msys中运行下面的命令表:


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


cd /h/bitcoin-0.9.1


./autogen.sh


CPPFLAGS="-I/h/deps/boost_1_55_0 \

-I/h/deps/db-4.8.30.NC/build_unix \

-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.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_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/src


make


strip src/bitcoin-cli.exe

strip src/bitcoind.exe

strip src/qt/bitcoin-qt.exe



在编译比特币源码时,中途会提示是否删除一些中件文件,可以使用下面的补丁脚本,可以让编译器自动跳过这些提问:

--- Makefile.include Sun Mar 16 12:05:28 2014

+++ Makefile.include Wed Mar 26 03:05:58 2014

@@ -40,18 +40,18 @@

ui_%.h: %.ui
 @test -d $(abs_builddir)/$(@D) || $(MKDIR_P) $(abs_builddir)/$(@D)
 @test -f $(UIC) && QT_SELECT=$(QT_SELECT) $(UIC) -o $(abs_builddir)/$@ $(abs_srcdir)/$< || echo error: could not build $(abs_builddir)/$@

- $(SED) -i.bak -e '/^\*\*.*Created:/d' $(abs_builddir)/$@ && rm $(abs_builddir)/$@.bak

- $(SED) -i.bak -e '/^\*\*.*by:/d' $(abs_builddir)/$@ && rm $(abs_builddir)/$@.bak

+ $(SED) -i.bak -e '/^\*\*.*Created:/d' $(abs_builddir)/$@ && rm -f $(abs_builddir)/$@.bak

+ $(SED) -i.bak -e '/^\*\*.*by:/d' $(abs_builddir)/$@ && rm -f $(abs_builddir)/$@.bak


%.moc: %.cpp
 QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) -o $@ $<

- $(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 $@.bak


moc_%.cpp: %.h
 QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) -o $@ $<

- $(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 $@.bak


%.qm: %.ts
 @test -d $(abs_builddir)/$(@D) || $(MKDIR_P) $(abs_builddir)/$(@D)

--- qt/Makefile.am Sun Mar 16 12:05:28 2014

+++ qt/Makefile.am Wed Mar 26 03:06:21 2014

@@ -371,7 +371,7 @@

$(QT_QRC_CPP): $(QT_QRC) $(QT_QM) $(QT_FORMS_H) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(PROTOBUF_H)
 @cd $(abs_srcdir); 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 $@.bak


CLEANFILES = $(BUILT_SOURCES) $(QT_QM) $(QT_FORMS_H) *.gcda *.gcno