比特币开发

康林(qq:16614119)

 

 

开发环境:

  1. windows 7 旗舰版
  2. mingw:http://www.mingw.org/

$ uname -a
MINGW32_NT-6.1 K-PC 1.0.18(0.48/3/2) 2012-11-21 22:34 i686 Msys

依赖库:

  1. OpenSSL         \openssl-1.0.1c-mgw        http://www.openssl.org/source/
  2. Berkeley DB     \db-4.8.30.NC-mgw          http://www.oracle.com/technology/software/products/berkeley-db/index.html
  3. Boost               \boost-1.55.0-mgw            http://www.boost.org/users/download/
  4. protobuf            protobuf2.5.0                   https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
  5. qt                      qt-4.8.5                            https://download.qt-project.org/archive/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz
  6. miniupnpc       \miniupnpc-1.6-mgw          http://miniupnp.tuxfamily.org/files/
  7. libpng               libpng-1.5.9                      ftp://ftp.simplesystems.org/pub/libpng/png/src/history/libpng15/libpng-1.5.9.tar.gz
  8. qrencode         qrncode3.2.0                     https://fukuchi.org/works/qrencode/qrencode-3.2.0.tar.bz2
  9. zlib                   zlib-1.2.6                           ftp://ftp.simplesystems.org/pub/libpng/png/src/history/zlib/zlib-1.2.6.tar.gz

前面四个依赖库是必选的。后面几个可选。zlib可以直接用mingw中的zlib开发库。

 

安装:

mingw:

下载mingw安装包。http://www.mingw.org/。如果磁盘空间够用,可以完全安装。

装完成后,需要修改配置文件C:\MinGW\msys\1.0\etc\fstab 。默认没有这个文件,但有个fstab.simple。把fstab.simple改名为fstab就可以了。

 

openssl:

MSYS shell:

解压,进入源码根目录。

./config
 make install

它会安装到/usr/local/ssl下

 

Berkeley DB
-----------
MSYS shell:

解压,进入源码根目录。

cd build_unix
sh ../dist/configure --enable-mingw --enable-cxx
make install

它会安装到/usr/loal/BerkeleyDB.4.8下

 

Boost
-----
MSYS shell:

解压,进入源码根目录。

boost编译用它自己的编译工具bjam,它包含在源码目录中。所以需要先生成bjam:

cd tools/build/v2/engine

build.sh mingw

会在bin.ntx86目录下生成bjam.exe文件

再次进入源码根目录:
 cd ../../../..
tools/build/v2/engine/bin.ntx86/bjam toolset=gcc  variant=release link=static runtime-link=static stage

 

protobuf   

---------

MSYS shell:

解压,进入源码根目录。
 

./configure

make install

 

qt下载安后按默认设置进行安装。
C:\Qt\4.8.5


mingw下源码编译:

./configure -xplatform win32-g++  -prefix "/usr/local/qt4.8.3" -opensource -static -no-qt3support -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-webkit  -no-svg

make install




MiniUPnPc
---------
UPnP support is optional, make with `USE_UPNP=` to disable it.

MSYS shell:

解压,进入源码根目录。
 make -f Makefile.mingw
 mkdir miniupnpc
 cp *.h miniupnpc/

mv miniupnpc /usr/local/include/.

cp *.a /usr/local/lib/.

 

libpng              

---------

MSYS shell:

解压,进入源码根目录。

./configure

make install

 

qrencode        

---------

MSYS shell:

解压,进入源码根目录。

./configure

make install

 

qt编译:

http://www.cnblogs.com/BuildingIT/archive/2013/03/22/2976480.html


下载比特币源码:

git clone https://github.com/bitcoin/bitcoin.git

进入源码根目录:

修改configure.ac文件。由于qt不支持pkg-config,所以需要修改qt库名为正确的库名:

qcncodecs、qjpcodecs、qkrcodecs、qtwcodecs、QtCore、QtGui、QtNetwork这些qt库后都加上个4

 

     if test x$TARGET_OS == xwindows; then
-      BITCOIN_QT_CHECK(AC_CHECK_LIB([qcncodecs],[main],,BITCOIN_QT_FAIL(libqcnc
-      BITCOIN_QT_CHECK(AC_CHECK_LIB([qjpcodecs],[main],,BITCOIN_QT_FAIL(libqjpc
-      BITCOIN_QT_CHECK(AC_CHECK_LIB([qkrcodecs],[main],,BITCOIN_QT_FAIL(libqkrc
-      BITCOIN_QT_CHECK(AC_CHECK_LIB([qtwcodecs],[main],,BITCOIN_QT_FAIL(libqtwc
+      BITCOIN_QT_CHECK(AC_CHECK_LIB([qcncodecs4],[main],,BITCOIN_QT_FAIL(libqcn
+      BITCOIN_QT_CHECK(AC_CHECK_LIB([qjpcodecs4],[main],,BITCOIN_QT_FAIL(libqjp
+      BITCOIN_QT_CHECK(AC_CHECK_LIB([qkrcodecs4],[main],,BITCOIN_QT_FAIL(libqkr
+      BITCOIN_QT_CHECK(AC_CHECK_LIB([qtwcodecs4],[main],,BITCOIN_QT_FAIL(libqtw
     fi

-    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtCore]   ,[main],,BITCOIN_QT_FAIL(libQtCore
-    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtGui]    ,[main],,BITCOIN_QT_FAIL(libQtGui
-    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtNetwork],[main],,BITCOIN_QT_FAIL(libQtNetw
+    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtCore4]   ,[main],,BITCOIN_QT_FAIL(libQtCor
+    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtGui4]    ,[main],,BITCOIN_QT_FAIL(libQtGui
+    BITCOIN_QT_CHECK(AC_CHECK_LIB([QtNetwork4],[main],,BITCOIN_QT_FAIL(libQtNet
     BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],,BITCOIN_QT_FAIL(libprotob

 

建立一个build.sh文件,配置依赖库的正确信息,加入下列内容:

./configure CFLAGS="-g -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -I/usr/local/include -I/usr/local/ssl/include -I/usr/local/BerkeleyDB.4.8/include" \
 CXXFLAGS="-g -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -I/usr/local/include -I/usr/local/ssl/include -I/usr/local/BerkeleyDB.4.8/include" \
 CPPFLAGS="-g -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -I/usr/local/include -I/usr/local/ssl/include -I/usr/local/BerkeleyDB.4.8/include" \
 LDFLAGS="-g -D_WIN32_WINNT=0x0501 -DWINVER=0x0501 -L/usr/local/lib -L/usr/local/ssl/lib -L/usr/local/BerkeleyDB.4.8/lib -static" \
 --disable-tests \
--with-qt-bindir=/c/Qt/4.8.5/bin \
 --with-qt-plugindir=/c/Qt/4.8.5/plugins \
 --with-qt-incdir=/c/Qt/4.8.5/include \
 --with-qt-libdir=/c/Qt/4.8.5/lib \
     QT_LIBS="-static"

 

chmod u+x build.sh

 

./autogen.sh

./build.sh

make

会在src目录下生成bitcoind.exe文件

会在src/qt目录下生成bitcoin-qt.exe文件

 

在编译过程中可能出现的错误:

 $ make -f makefile.mingw
g++ -c -mthreads -O2 -w -Wall -Wextra -Wformat -Wformat-security -Wno-unused-par
ameter -g -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADS
AFE -I/e/source/bitcoind/bitcoin/src/leveldb/include -I/e/source/bitcoind/bitcoi
n/src/leveldb/helpers -I"/e/source/bitcoind/bitcoin/src" -I"/usr/local/include"
-I"/usr/local/BerkeleyDB.4.8/include" -I"/usr/local/ssl/include" -I/e/source/bit
coind/deps/boost_1_55_0 -o obj/rpcnet.o rpcnet.cpp
In file included from compat.h:17:0,
                 from netbase.h:11,
                 from net.h:19,
                 from rpcnet.cpp:5:
g:\mingw\include\ws2tcpip.h:38:2: error: #error "ws2tcpip.h is not compatible wi


解决办法:在rpcnet.cpp文件中#include “net.h”前加入下列头文件:

#include "bignum.h"
#include "sync.h"



在cygwin下编译:

安装cygwin,由于上面的依赖库,cygwin中都有预编译好的,需要只安装上面的所有依赖库就可以。

直接进入bitcoin源码根目录:

./autogen.sh

make

 

启动bitcoin-qt前需要:

export DISPLAY=:0


ubunt linux下编译只要按安装依赖库,编译没什么困难。

ubuntu linux下交叉编译windows下:

安装交叉编译工具:

sudo apt-get install mingw32

交叉编译工具安装到:

k@k-C410:/usr/bin$ ls i586*
i586-mingw32msvc-addr2line       i586-mingw32msvc-gcov
i586-mingw32msvc-ar              i586-mingw32msvc-gprof
i586-mingw32msvc-as              i586-mingw32msvc-ld
i586-mingw32msvc-c++             i586-mingw32msvc-nm
i586-mingw32msvc-cc              i586-mingw32msvc-objcopy
i586-mingw32msvc-c++filt         i586-mingw32msvc-objdump
i586-mingw32msvc-cpp             i586-mingw32msvc-ranlib
i586-mingw32msvc-dlltool         i586-mingw32msvc-readelf
i586-mingw32msvc-dllwrap         i586-mingw32msvc-size
i586-mingw32msvc-g++             i586-mingw32msvc-strings
i586-mingw32msvc-gcc             i586-mingw32msvc-strip
i586-mingw32msvc-gcc-4.2.1-sjlj  i586-mingw32msvc-windmc
i586-mingw32msvc-gccbug          i586-mingw32msvc-windres

k@k-C410:/usr/i586-mingw32msvc$ ls
bin  include  lib

 

openssl:

MSYS shell:

解压,进入源码根目录。

CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar AS=i586-mingw32msvc-as RANLIB=i586-mingw32msvc-ranlib LD=i586-mingw32msvc-ld ./config    os/compiler:mingw

make


 

Berkeley DB
-----------
MSYS shell:

解压,进入源码根目录。

cd build_unix
CC=i586-mingw32msvc-cc ../dist/configure --enable-mingw --enable-cxx --host=i586-mingw32msvc
make


 

Boost
-----
MSYS shell:

解压,进入源码根目录。

boost编译用它自己的编译工具bjam,它包含在源码目录中。所以需要先生成bjam:

k@k-C410:/data/deps/boost_1_50_0$ ./bootstrap.sh

在当前目录下生成 b2、bjam程序。

修改 project-config.jam 文件:

     # file.
     if ! gcc in [ feature.values  ]
     {
    -    using gcc ;
    +    using gcc : : i586-mingw32msvc-g++ ;
     }
    
 
执行编译:
k@k-C410:/data/deps/boost_1_50_0$./bjam toolset=gcc variant=release link=static runtime-link=static target-os=windows threadapi=win32 stage

可参考:http://www.boost.org/boost-build2/doc/html/bbv2/tasks/crosscompile.html


qt

——————-

linux下源码交叉编译:

k@k-C410:/data/qt-everywhere-opensource-src-4.8.3$ ./configure -xplatform win32-g++  -prefix "/usr/local/qt4.8.3" -opensource -static -no-qt3support -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-webkit -device-option CROSS_COMPILE=i586-mingw32msvc- -no-svg

k@k-C410:/data/qt-everywhere-opensource-src-4.8.3$ make install

修改配置文件qmake.conf:

k@k-C410:/usr/local/qt4.8.3/mkspecs/win32-g++$ vi qmake.conf



进入bitcoin/src目录下:

修改makefile.linux-mingw文件,把上面依赖库的位置改成你编译后的位置。再编译:

make -f makefile.linux-mingw

你可能感兴趣的:(比特币开发)