对于大学的课程,我必须证明asm.js。我找到了一个教程(http://www.sitepoint.com/understanding-asm-js/),这正是我想要的。所以我创建了给定的C++文件并使用Emscripten编译它。结果是一个近 10000 行长的文件。无处可寻"use asm"语句。与手写的JavaScript文件相比,它要慢得多。
我正在使用一个可移植的Emscripten-SDK包,并在使用它之前对其进行了更新。
如何让 Emscripten 生成好的 asm 代码?
更新:我在没有Emscipten的情况下为我的演示找到了不同的解决方案:https://gist.github.com/dherman/3d0b4733303eaf4bae5e。也许有人需要这个。
根据我的测试,Emscripten 似乎只使用 asm.js,并在优化级别 -O1
及以上"use asm";
放入生成的 Javascript 中。所以在编译时,你需要传递-O1
(或比1
更高的级别)给编译器:
EEMCC来源.cpp-O1 -o 目标.js'
如果您没有指定优化级别,或者没有通过-O0
:
EEMCC来源.cpp -O0 -o 目标.js'
然后"use asm";
不会被放入生成的 Javascript 中。
> 10k 行 JavaScript 是相当适中的,因为它必须包含与系统库(libc 等)等效的功能,当您执行 C++ 编译源代码时,它们作为单独的文件存在 - 当浏览器执行 JavaScript 时,它的沙盒化并且无法访问目标计算机上的此类系统库(由于安全性、操作系统中立性...... 例如,只需对一些动态链接的C/C ++可执行文件执行ldd命令即可了解其中的大部分内容10k行JavaScript正在取代:
ldd /bin/ls
linux-vdso.so.1 => (0x00007fff8c865000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f7b82854000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f7b8264b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7b82285000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7b82018000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7b81e14000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7b82aba000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f7b81c0e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7b819f0000)
这可能会为您提供有关使用 ASM.js 和 Emscripten 的更多提示:https://hacks.mozilla.org/2014/11/porting-to-emscripten/