比特股开发区块链大学区块链研习社

bitshares vs2013 x64位 编译

2018-08-17  本文已影响8人  6017e164c325
  1. windows编译bitshares

    • 前提:安装好vs2013-update5、cmake、git工具、doxygen工具(非必须),环境变量PATH有对应的EXE
    • 目录结构
    - D:\_workdir\source
        - bitshares
            - bitshares-core
        - dependencies
            - boost_1_57_0
            - source
                - openssl-1.0.1u
                - zlib-1.2.11
                - curl-7.59.0
            - bin
            - include
            - lib
            - ssl
    
    • 编译openssl
      cd D:\_workdir\source\dependencies\source\openssl-1.0.1u
      perl Configure VC-WIN64A --prefix=D:\_workdir\source\dependencies
      ms\do_win64a
      nmake -f ms\nt.mak
      nmake -f ms\nt.mak install
      
    • 编译zlib
      • 下载zlib源码,选择的是1.2.11版本
      • 打开“contrib\vstudio\vc12\zlibvc.sln”,选择release和x64进行编译
      • 编译成功后把“contrib\vstudio\vc12\x64\ZlibStatRelease\zlibstat.lib”复制到“dependencies\lib\zlib.lib”,把“D:_workdir\source\dependencies\source\zlib-1.2.11”的头文件“zlib.h、zconf.h”复制到“dependencies\include”目录
    • 编译curl
      cd D:\_workdir\source\dependencies\source\curl-7.59.0\winbuild
      nmake /f Makefile.vc mode=static VC=12 WITH_DEVEL=D:\_workdir\source\dependencies WITH_SSL=static WITH_ZLIB=static MACHINE=x64
      
      • 编译成功后把“dependencies\source\curl-7.59.0\builds\libcurl-vc12-x64-release-static-ssl-static-zlib-static-ipv6-sspi”的所有目录copy到“dependencies”下,libcurl.lib更名为curl.lib

      • 修改curl.h头文件,在第109行加入

      #define CURL_STATICLIB
      
    • 编译boost
      • 下载1.57版本
      • 打开vs2013 x64 本机工具命令提示,输入
      cd D:\_workdir\source\dependencies\boost_1_57_0
      .\bootstrap.bat
      b2 stage --address-model=64 --toolset=msvc-12.0 --threading=muti --link=static
      
    • 编译bitshares
      • 下载源码,切换到最新版本。打开vs2013 x64 本机工具命令提示,输入
      cd D:\_workdir\source\bitshares
      git clone https://github.com/bitshares/bitshares-core
      cd bitshares-core
      git submodule update --init --recursive
      rem git checkout 2.0.180425 
      rem 注释掉这句,这个版本缺少一个文件
      
      • 重启系统,确保以上的PATH都生效
      • 设置环境脚本setenv_x64.bat,放到bitshares-core目录
      @echo off
      
      set GRA_ROOT=D:\_workdir\source\bitshares\bitshares-core
      set OPENSSL_ROOT=D:\_workdir\source\dependencies
      set OPENSSL_ROOT_DIR=%OPENSSL_ROOT%
      set OPENSSL_INCLUDE_DIR=%OPENSSL_ROOT%\include
      set BOOST_ROOT=D:\_workdir\source\dependencies\boost_1_57_0
      set PATH=%BOOST_ROOT%\stage\lib;%PATH%
      
      • 为了兼容windows版本,进行相应修改,见以下内容
      • 打开vs2013 x64 本机工具命令提示,输入
      cd D:\_workdir\source\bitshares\bitshares-core
      setenv_x64.bat
      cmake-gui
      
      • 配置cmake工程,
        • 设置source目录为:D:_workdir\source\bitshares\bitshares-core
        • 设置输出目录为:D:_workdir\source\bitshares\bitshares-core\x64
        • 点击Configure,在弹出框中,
          • 第一个下拉框 Specify the generator for this project 选 Visual Studio 12 2013 Win64
          • 第二个输入框 Optional toolset to use (argument to -T) 留空
          • 下面的单选框,选 Use default native compilers
        • 点 Finish ,然后等一会, Generate 按钮会亮起
        • 点 Generate ,然后等一会, Open Project 按钮会亮起
        • 点 Open Project ,会打开 Visual Studio
      • 开始编译,有可能遇到bigobj问题,再进行相应修改
  2. <span id = "2">为兼容windows版本,需对bitshares源码进行以下相关修改</span>

    • bitshares源码修改
    diff --git a/CMakeLists.txt b/CMakeLists.txt
    index 5e91e80b..e11f4c20 100644
    --- a/CMakeLists.txt
    +++ b/CMakeLists.txt
    @@ -2,6 +2,10 @@
    project( BitShares )
    cmake_minimum_required( VERSION 2.8.12 )
    
    +if(POLICY CMP0054)
    +  cmake_policy(SET CMP0054 NEW)
    +endif()
    +
    set( BLOCKCHAIN_NAME "BitShares" )
    
    set( CLI_CLIENT_EXECUTABLE_NAME graphene_client )
    diff --git a/libraries/chain/include/graphene/chain/protocol/fee_schedule.hpp b/libraries/chain/include/graphene/chain/protocol/fee_schedule.hpp
    index 2d381308..0d18e8b8 100644
    --- a/libraries/chain/include/graphene/chain/protocol/fee_schedule.hpp
    +++ b/libraries/chain/include/graphene/chain/protocol/fee_schedule.hpp
    @@ -54,7 +54,7 @@ namespace graphene { namespace chain {
            FC_ASSERT( itr != parameters.end() );
            return itr->get<account_create_operation::fee_parameters_type>();
        }
    -      typename account_create_operation::fee_parameters_type& get(flat_set<fee_parameters>& parameters)const
    +      account_create_operation::fee_parameters_type& get(flat_set<fee_parameters>& parameters)const
        {
            auto itr = parameters.find( account_create_operation::fee_parameters_type() );
            FC_ASSERT( itr != parameters.end() );
    diff --git a/tests/cli/main.cpp b/tests/cli/main.cpp
    index b78bb835..a8a11023 100644
    --- a/tests/cli/main.cpp
    +++ b/tests/cli/main.cpp
    @@ -38,8 +38,12 @@
    #include <fc/rpc/websocket_api.hpp>
    #include <fc/rpc/cli.hpp>
    
    +#if defined _WINDOWS_ || defined WIN32
    +#include "winsock2.h"
    +#else
    #include <sys/socket.h>
    #include <netinet/ip.h>
    +#endif
    #include <sys/types.h>
    
    #include <boost/filesystem/path.hpp>
    @@ -109,9 +113,14 @@ int get_available_port()
        sin.sin_family = AF_INET;
        sin.sin_port = 0;
        sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
    -   if (bind(socket_fd, (struct sockaddr*)&sin, sizeof(struct sockaddr_in)) == -1)
    +   if (::bind(socket_fd, (struct sockaddr*)&sin, sizeof(struct sockaddr_in)) == -1)
        return -1;
    +
    +#if defined _WINDOWS_  || defined WIN32
    +   int len = sizeof(sin);
    +#else
        socklen_t len = sizeof(sin);
    +#endif
        if (getsockname(socket_fd, (struct sockaddr *)&sin, &len) == -1)
        return -1;
        return sin.sin_port;
    
    • fc 源码修改
    diff --git a/CMakeLists.txt b/CMakeLists.txt
    index c5ed733..4c957fe 100644                                                     
    --- a/CMakeLists.txt                                                              
    +++ b/CMakeLists.txt                                                              
    @@ -4,6 +4,10 @@                                                                  
    PROJECT( fc )                              
    CMAKE_MINIMUM_REQUIRED( VERSION 2.8.12 )     
                                            
    +if(POLICY CMP0054)                       
    +  cmake_policy(SET CMP0054 NEW)     
    +endif()                                       
    + 
    MESSAGE(STATUS "Configuring project fc located in: ${CMAKE_CURRENT_SOURCE_DIR}")
    SET( CMAKE_AUTOMOC OFF )        
                            
    diff --git a/src/asio.cpp b/src/asio.cpp
    index 1313ed7..f22da17 100644
    --- a/src/asio.cpp
    +++ b/src/asio.cpp
    @@ -106,11 +106,11 @@ namespace fc {
                    {
                    fc::thread::current().set_name("asio");
    
    -                 BOOST_SCOPE_EXIT(void)
    -                 {
    -                   fc::thread::cleanup();
    -                 }
    -                 BOOST_SCOPE_EXIT_END
    +                                //BOOST_SCOPE_EXIT(void)
    +                                //{
    +                                       // fc::thread::cleanup();
    +                                //}
    +                                //BOOST_SCOPE_EXIT_END
                    
                    while (!io->stopped())
                    {
    
    • 以下cpp文件添加“/bigobj”编译属性,可能不同机器不一样,最终按编译提示来处理
      • 项目app_test
        • bitshares-core\tests\app\main.cpp
      • 项目chain_bench
        • bitshares-core\tests\common\database_fixture.cpp
      • 项目chain_test
        • bitshares-core\tests\common\database_fixture.cpp
      • 项目cli_test
        • bitshares-core\tests\cli\main.cpp
      • 项目cli_wallet
        • bitshares-core\programs\cli_wallet\main.cpp
      • 项目performance_test
        • bitshares-core\tests\common\database_fixture.cpp
      • 项目witness_node
        • bitshares-core\programs\witness_node\main.cpp
上一篇下一篇

猜你喜欢

热点阅读