64bit Windows用のKumacoin-Qt Walletビルド方法

  • 実績のあるビルド環境
    • Windows10 Home 64bit
    • バージョン 1709
    • OSビルド 16299.248

いずれもインストールの際に環境変数PATHへインストールしたプログラムのフォルダを追加するようにしてください。




  • 依存ライブラリのビルド
    • openssl
      • プログラム一覧から「MinGW」→「MinGW Shell」を選択してシェルを起動する
        (もしくはエクスプローラーで「C:\MinGW\msys\1.0」フォルダを開き「msys.bat」を実行)
      • 「deps」フォルダへ移動する
        cd /c/deps
      • ソースコードを展開する
        tar xfz openssl-1.0.1j.tar.gz
      • 「openssl-1.0.1j」フォルダへ移動する
        cd openssl-1.0.1j
      • Configureを実行する
        Configure no-shared no-dso mingw
      • ビルドする
        make
    • libdb
      • プログラム一覧から「MinGW」→「MinGW Shell」を選択してシェルを起動する
        (もしくはエクスプローラーで「C:\MinGW\msys\1.0」フォルダを開き「msys.bat」を実行)
        すでに起動済みの場合は開いているシェルをそのまま使ってOK
      • 「deps」フォルダへ移動する
        cd /c/deps
      • ソースコードを展開する
        tar xfz db-4.8.30.NC.tar.gz
      • 「build_unix」フォルダへ移動する
        cd db-4.8.30.NC/build_unix
      • Configureを実行する
        ../dist/configure --enable-mingw --enable-cxx --disable-replication --with-mutex=x86_64/gcc-assembly
      • エクスプローラーで「C:\deps\db-4.8.30.NC\build_unix」フォルダを開く
      • テキストエディタで「db.h」を開く
      • 113行目にある「pthread_t」を「u_int32_t」へ書き変える
      • ビルドする
        make
    • boost
      • 「deps」フォルダにある「boost_1_55_0.zip」を展開する
        (展開した結果「C:\deps\boost_1_55_0\boost_1_55_0」となってしまった場合は「C:\deps\boost_1_55_0」に修正)
      • プログラム一覧からWindowsの「コマンドプロンプト」を起動する
      • 「boost_1_55_0」フォルダへ移動する
        cd C:\deps\boost_1_55_0\
      • b2.exeを生成する
        .\bootstrap.bat mingw
      • ビルドする
        .\b2.exe --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
    • Miniupnpc
      • プログラム一覧から「MinGW」→「MinGW Shell」を選択してシェルを起動する
        (もしくはエクスプローラーで「C:\MinGW\msys\1.0」フォルダを開き「msys.bat」を実行)
        すでに起動済みの場合は開いているシェルをそのまま使ってOK
      • 「deps」フォルダへ移動する
        cd /c/deps
      • ソースコードを展開する
        tar xfz miniupnpc-1.9.tar.gz
      • 展開された「miniupnpc-1.9」フォルダの名前を「miniupnpc」へ変更する
        mv miniupnpc-1.9 miniupnpc
      • 「miniupnpc」フォルダへ移動する
        cd miniupnpc
      • ビルドする
        mingw32-make -f Makefile.mingw init upnpc-static


  • QTのビルド
    • 「qt」フォルダにある「qt-everywhere-opensource-src-4.8.5.zip」を展開する
      (展開した結果「C:\qt\qt-everywhere-opensource-src-4.8.5\qt-everywhere-opensource-src-4.8.5」となってしまった場合は「C:\qt\qt-everywhere-opensource-src-4.8.5」に修正)
    • 「c:\qt\qt-everywhere-opensource-src-4.8.5」のフォルダ名を「c:\qt\4.8.5」へ変更する
    • プログラム一覧からWindowsの「コマンドプロンプト」を起動する
      すでに起動済みの場合は開いているコマンドプロンプトをそのまま使ってOK
    • 環境変数PATHに「c:\MinGW\bin」と「C:\MinGW\msys\1.0\bin」を追加
      set PATH=%PATH%;c:\MinGW\bin;C:\MinGW\msys\1.0\bin
    • 「4.8.5」フォルダへ移動する
      cd C:\qt\4.8.5
    • Configureを実行する
      .\configure.exe -release -opensource -confirm-license -static -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -nomake demos -nomake examples
    • ビルドする
      mingw32-make

  • kumacoin-qtビルドへ向けての下準備
    • 「c:\kumacoin-build」フォルダを作成する

  • kumacoin-qtのビルド
    • プログラム一覧からWindowsの「コマンドプロンプト」を起動する
      すでに起動済みの場合は開いているコマンドプロンプトをそのまま使ってOK
    • 環境変数PATHに「c:\qt\4.8.5\bin」と「c:\MinGW\bin」と「C:\MinGW\msys\1.0\bin」を追加
      set PATH=%PATH%;c:\qt\4.8.5\bin;c:\MinGW\bin;C:\MinGW\msys\1.0\bin
    • 「kumacoin-build」フォルダへ移動する
      cd c:\kumacoin-build
    • Githubからkumacoinのソースを取得する
      git clone https://github.com/kumacoinproject/kumacoin.git
    • テキストエディタで「c:\kumacoin-build\kumacoin\kumacoin-qt.pro」を開いて以下を修正する
      • ファイル先頭の方にある「CONFIG += no_include_pwd」の次の行に「CONFIG += static」を追加する
      • 40行目付近にある「win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat」を「win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat -static」へ変更する
      • 10行目付近にある空白行に以下の10行を追記する
        BOOST_LIB_SUFFIX=-mgw46-mt-s-1_55
        BOOST_INCLUDE_PATH=C:/deps/boost_1_55_0
        BOOST_LIB_PATH=C:/deps/boost_1_55_0/stage/lib
        BDB_INCLUDE_PATH=C:/deps/db-4.8.30.NC/build_unix
        BDB_LIB_PATH=C:/deps/db-4.8.30.NC/build_unix
        OPENSSL_INCLUDE_PATH=C:/deps/openssl-1.0.1j/include
        OPENSSL_LIB_PATH=C:/deps/openssl-1.0.1j
        MINIUPNPC_LIB_SUFFIX=-miniupnpc
        MINIUPNPC_INCLUDE_PATH=C:/deps
        MINIUPNPC_LIB_PATH=C:/deps/miniupnpc
      • 変更内容を保存して「c:\kumacoin-build\kumacoin\kumacoin-qt.pro」を閉じる
    • 「kumacoin」フォルダへ移動する
      cd c:\kumacoin-build\kumacoin
    • qmakeを実行する
      qmake "USE_UPNP=1" kumacoin-qt.pro
    • ビルドする
      mingw32-make -f Makefile.Release
    • ビルドに成功していれば「:\kumacoin-build\kumacoin\release」フォルダに「kumacoin-qt.exe」が出来ています。
      お疲れさまでした!

  • トラブルシューティング
    • undefined reference to `WinMain?@16'
      これはmingw32で使用できない関数を用いているという意味だがmingwのバグらしい。エラー文は{APPNAME:=XXXXX.exe}となっているのでXXXXX.cを確認すると空のファイルが作成されてテストに失敗している。空のファイルを削除しmakeし直すとできます。
  • 文を忘れたがautoがなんとか書いてあるエラー
    C++11環境のコードが含まれているのでコンパイラに教えないといけない。そしてGNU拡張されているので「QMAKE_CXXFLAGS += -msse2」の次の行に「QMAKE_CXXFLAGS += -std=gnu++0x」を加える。
  • ld.exe: cannot find -lboost_***
    BoostにリンカーのPATHが通っていない。BOOST_LIB_PATHが効かないようなので通常のPATHに追加する。
  • ビルド成功し起動するとスプラッシュ画面が表示されるもののError initializing database environmentと言われ、db.logにPANIC: Operation not permittedと出力されるエラー
    BerkeleyDBでpthread-win32使用時に定期的に起こる問題らしい、しかしよくわからない。ソースを初めからビルドし直したらエラーが消えた。
  • berkeleydDB5.3.28を使用する場合
    • 本家サイトからDLするには登録作業が必要になるので某コインのソースに取り込まれたものを使用する。
    • ソースを取得しhttps://github.com/iadix/iadixcoin、「db-5.3.28.NC」を C:/deps へ移動。
    • MinGW Shellを起動し db-4.8.30.NC/build_unix へ移動し configure を行う。
    • db.h の u_int32_tpthread_t に変える、ここまではDB4.8.30と同じ。
    • 次に src/os/os_pid.c の49~62行を以下のように書き換える。
      	if (tidp != NULL) {
      #if defined(DB_WIN32)
      		*tidp = GetCurrentThreadId();
      #elif defined(HAVE_MUTEX_UI_THREADS)
      		*tidp = thr_self();
      #elif defined(HAVE_PTHREAD_SELF)
      		*tidp = pthread_self();
      #else
      		/*
      		 * Default to just getpid.
      		 */
      		*tidp = 0;
      #endif
      	}
    • そしてmakeする。kumacoin-qt.proの変更も忘れずに。