Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
省略一些C++;子系统 我注意到,使用EnScript,即使是比较小的C++文件也能很快变成相当大的JavaScript文件。例如: #包括 int main(int argc,字符**argv){ std::共享ptr sp(新int); }_Javascript_C++_Emscripten_Libc++ - Fatal编程技术网

省略一些C++;子系统 我注意到,使用EnScript,即使是比较小的C++文件也能很快变成相当大的JavaScript文件。例如: #包括 int main(int argc,字符**argv){ std::共享ptr sp(新int); }

省略一些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

使用以下命令使用最新的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::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
静态库,其中包含多个不同的对象。其中,只有所需的才会被链接,这大大减少了简单情况下的代码大小