康林(qq:16614119)
开发环境:
$ uname -a
MINGW32_NT-6.1 K-PC 1.0.18(0.48/3/2) 2012-11-21 22:34 i686 Msys
依赖库:
前面四个依赖库是必选的。后面几个可选。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++ ;
}
执行编译:
可参考: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