Boost mit Emscripten verwenden

Ich habe ein C ++ - Projekt, das ich in eine Webanwendung konvertieren möchte. Zu diesem Zweck möchte ich Emscripten verwenden, um das Projekt zu erstellen.

Das Projekt verwendet einige externe Bibliotheken. Ich habe es geschafft, die JavaScript-Version der meisten Bibliotheken zu kompilieren oder zu finden, und jetzt bin ich bei den Boost-Versionen geblieben. Eigentlich weiß ich gar nicht, wie ich Boost starten soll: Sie verwenden ein Boostrap-Skript, um die Dateien zum Erstellen der Bibliotheken zu generieren. Es ist möglich, das Toolset an dieses Skript zu übergeben, Emscripten wird jedoch offensichtlich nicht unterstützt.

Mein Projekt verwendet die folgenden Teile von Boost: Thread, Regex, Dateisystem, Signale, System. Wie kann ich diese Bibliotheken mit Emscripten kompilieren?

Bearbeiten

Nach der Antwort von npclaudiu habe ich die Bibliothek mit dem gcc-Toolkit gebootet und dann bearbeitetproject-config.jam Um den Compiler zu konfigurieren, ersetzen Sie:

# 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 ;
}

mit

# 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++" ;
}

Jetzt tippen./b2 effektiv baut die Bibliotheken. Boost.Signals und Boost.System lassen sich gut kompilieren. Die anderen haben einige Fehler.

Boost.Thread beschwert sich:

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

Boost.Regex beklagt sich viel darüber, dass CHAR_BIT nicht deklariert ist, aber es scheint ein Problem bei emscripten zu sein:

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 scheint auch wegen emscripten zu scheitern:

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;
      ~~^

Antworten auf die Frage(4)

Ihre Antwort auf die Frage