省略一些C++;子系统 我注意到,使用EnScript,即使是比较小的C++文件也能很快变成相当大的JavaScript文件。例如: #包括 int main(int argc,字符**argv){ std::共享ptr sp(新int); }
使用以下命令使用最新的emsdk编译此文件省略一些C++;子系统 我注意到,使用EnScript,即使是比较小的C++文件也能很快变成相当大的JavaScript文件。例如: #包括 int main(int argc,字符**argv){ std::共享ptr sp(新int); },javascript,c++,emscripten,libc++,Javascript,C++,Emscripten,Libc++,使用以下命令使用最新的emsdk编译此文件 em++-std=c++11-s禁用异常捕获=1-s无文件系统=1\ -s NO_BROWSER=1-s NO_EXIT_RUNTIME=1-O3-o foo.js foo.cc 结果文件的大小超过400k。有了-g我可以 grep-n'^function\uu'foo.js|c++过滤器-_ 看看我们有什么样的功能。以下是一些例子: std::\uuuu 1::moneypunct::do\u数千\u sep()常量 std::_1::local
em++-std=c++11-s禁用异常捕获=1-s无文件系统=1\
-s NO_BROWSER=1-s NO_EXIT_RUNTIME=1-O3-o foo.js foo.cc
结果文件的大小超过400k。有了-g
我可以
grep-n'^function\uu'foo.js|c++过滤器-_
看看我们有什么样的功能。以下是一些例子:
std::\uuuu 1::moneypunct::do\u数千\u sep()常量
std::_1::locale::~locale()
std::uu 1::基本字符串::~basic_u字符串()
std::uuu 1::时间获取::uu获取日(…)常数
std::_1::codevt::codevt(无符号整数)
std::_1::locale::_imp::install(std::_1::locale::facet*,long)
_printf_核
我自己并没有调用任何函数,但是所有函数都包含在内。可能其中很多都包含在某个虚拟函数表中。其他可能是由于某些静态初始值设定项
如果这是针对我硬盘上某个共享库链接的普通代码;我不反对。但是仅仅为了一个共享指针就要传输半兆字节的JavaScript代码?必须有一种方法来避免它。< P>一个解决方案,实现的,只是简单地将C++库分成几个部分。通过将处理I/O和区域设置的代码移动到一个单独的库中,所有可以在没有此功能的情况下工作的代码都可以避免I/O子系统的静态初始值设定项,从而导致对上述函数的依赖。不幸的是,由于明显的原因,这也会影响strstream
更新:自上游(首次包含在1.30.6版中)以来,系统库不再编译为单个
*.bc
文件,而是编译为*.a
静态库,其中包含多个不同的对象。其中,只有所需的才会被链接,这大大减少了简单情况下的代码大小