我有一個C++項目,我想轉換爲一個web應用程序。爲此,我想使用Emscripten來構建項目。使用Boost和Emscripten
該項目使用一些外部庫。我設法編譯或查找大多數庫的JavaScript版本,現在我堅持使用Boost。實際上,我甚至不知道如何開始Boost:他們使用boostrap腳本來生成文件來構建庫。可以將工具集傳遞給此腳本,但Emscripten顯然不受支持。
我的項目使用Boost的以下部分:線程,正則表達式,文件系統,信號,系統。我如何使用Emscripten編譯這些庫?
編輯
繼npclaudiu的答案,我自舉庫與海灣合作委員會工具包,然後我編輯project-config.jam
配置編譯器,替換:
# 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 ;
}
與
# 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++" ;
}
現在,輸入./b2
可以有效地構建庫。 Boost.Signals和Boost.System編譯良好。其他人有一些錯誤。
Boost.Thread抱怨:
libs/thread/src/pthread/thread.cpp:503:27: error: use of undeclared identifier 'pthread_yield'
BOOST_VERIFY(!pthread_yield());
^
Boost.Regex抱怨了很多關於CHAR_BIT是未申報的,但它似乎是在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的似乎要失敗由於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;
~~^
Web後端或前端? –
這將是前端。這是一個我想在網絡瀏覽器中播放的遊戲。 – Julien
只是爲了好奇,有多少MB在編譯爲emscripten代碼時需要Boost? :D – GameDeveloper