Używanie Boost z Emscripten

Mam projekt c ++, który chciałbym przekonwertować na aplikację internetową. W tym celu chciałbym użyć Emscripten do zbudowania projektu.

Projekt korzysta z niektórych zewnętrznych bibliotek. Udało mi się skompilować lub znaleźć wersję JavaScript większości bibliotek, a teraz utknąłem z wersjami Boost. Właściwie nie wiem nawet, jak uruchomić Boost: używają skryptu boostrap, aby wygenerować pliki do budowy bibliotek. Możliwe jest przekazanie zestawu narzędzi do tego skryptu, ale oczywiście Emscripten nie jest obsługiwany.

Mój projekt wykorzystuje następujące części Boost: Wątek, Regex, System plików, Sygnały, System. Jak mogę skompilować te biblioteki za pomocą Emscripten?

Edytować

Idąc za odpowiedzią npclaudiu, załadowałem bibliotekę za pomocą zestawu narzędzi gcc, a następnie edytowałemproject-config.jam skonfigurować kompilator, zastępując:

# 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 <toolset> ]
{
    using gcc ;
}

z

# 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 <toolset> ]
{
    using gcc : : "/full/path/to/em++" ;
}

Teraz pisząc./b2 skutecznie buduje biblioteki. Boost.Signals i Boost.System kompiluj dobrze. Inni mają pewne błędy.

Boost.Thread narzeka:

libs/thread/src/pthread/thread.cpp:503:27: error: use of undeclared identifier 'pthread_yield'
        BOOST_VERIFY(!pthread_yield());
                      ^

Boost.Regex narzeka dużo na to, że CHAR_BIT jest niezadeklarowany, ale wydaje się, że jest to problem w emscripten:

In file included from libs/regex/build/../src/c_regex_traits.cpp:28:
In file included from ./boost/regex/v4/c_regex_traits.hpp:26:
In file included from ./boost/regex/v4/regex_workaround.hpp:35:
/path/to/emscripten/system/include/libcxx/vector:1989:92: error: use of undeclared identifier 'CHAR_BIT'
static const unsigned __bits_per_word = static_cast<unsigned>(sizeof(__storage_type) * CHAR_BIT);
                                                                                       ^

Boost.FileSystem wydaje się nie działać z powodu emscripten:

In file included from libs/filesystem/src/windows_file_codecvt.cpp:21:
/path/to/emscripten/system/include/libcxx/cwchar:117:9: error: no member named 'FILE' in the global namespace
using ::FILE;
      ~~^

questionAnswers(4)

yourAnswerToTheQuestion