Using Boost with Emscripten

前端 未结 6 1903
广开言路
广开言路 2020-12-07 18:08

I have a c++ project I would like to convert to a web application. For this purpose, I would like to use Emscripten to build the project.

The project uses some exter

6条回答
  •  盖世英雄少女心
    2020-12-07 18:45

    I finally managed to compile the needed libraries with emscripten. Here are the steps I followed.

    Changes in emscripten

    Edit system/include/libcxx/climits to add the following definitions (see http://github.com/kripken/emscripten/issues/531):

    #ifndef CHAR_BIT
    # define CHAR_BIT __CHAR_BIT__
    #endif
    
    #ifndef CHAR_MIN
    # define CHAR_MIN (-128)
    #endif
    
    #ifndef CHAR_MAX
    # define CHAR_MAX 127
    #endif
    
    #ifndef SCHAR_MIN
    # define SCHAR_MIN (-128)
    #endif
    
    #ifndef SCHAR_MAX
    # define SCHAR_MAX 127
    #endif
    
    #ifndef UCHAR_MAX
    
    # define UCHAR_MAX 255
    #endif
    
    #ifndef SHRT_MIN
    # define SHRT_MIN (-32767-1)
    #endif
    
    #ifndef SHRT_MAX
    # define SHRT_MAX 32767
    #endif
    
    #ifndef USHRT_MAX
    # define USHRT_MAX 65535
    #endif
    
    #ifndef INT_MAX
    # define INT_MAX __INT_MAX__
    #endif
    
    #ifndef INT_MIN
    # define INT_MIN (-INT_MAX-1)
    # define INT_MIN (-INT_MAX-1)
    #endif
    
    #ifndef UINT_MAX
    # define UINT_MAX (INT_MAX * 2U + 1)
    #endif
    
    #ifndef LONG_MAX
    # define LONG_MAX __LONG_MAX__
    #endif
    
    #ifndef LONG_MIN
    # define LONG_MIN (-LONG_MAX-1)
    #endif
    
    #ifndef ULONG_MAX
    # define ULONG_MAX (LONG_MAX * 2UL + 1)
    #endif
    

    Add the following line in system/include/libcxx/cwchar

    #include 
    

    Compiling Boost as shared libraries

    As suggested by npclaudiu, bootstrap the library using the gcc toolkit. Then edit project-config.jam to configure the compiler and replace:

    # Compiler configuration. This definition will be used unless
    # you already have defined some toolsets in your user-config.jam
    # file.
    if ! gcc in [ feature.values  ]
    {
        using gcc ;
    }
    

    with

    # Compiler configuration. This definition will be used unless
    # you already have defined some toolsets in your user-config.jam
    # file.
    if ! gcc in [ feature.values  ]
    {
        using gcc : : "/full/path/to/emscripten/em++" ;
    }
    

    Force BOOST_HAS_SCHER_YIELD in boost/config/posix_features.hpp, around the line 67.

    Then compile the libraries: ./b2 thread regex filesystem signals system

    Compiling Boost as static libraries

    Do all the above steps, then edit tools/build/v2/tools/gcc.jam and replace:

    toolset.flags gcc.archive .AR $(condition) : $(archiver[1]) ;
    

    with

    toolset.flags gcc.archive .AR $(condition) : "/full/path/to/emscripten/emar" ;
    

    and

    toolset.flags gcc.archive .RANLIB $(condition) : $(ranlib[1]) ;
    

    with

    toolset.flags gcc.archive .RANLIB $(condition) :
      "/full/path/to/emscripten/emranlib" ;
    

    Compile the libraries: ./b2 link=static variant=release threading=single runtime-link=static thread signals system filesystem regex

提交回复
热议问题