Emscripten 编译C++ 到 JavaScript 和 Asm.js 的结果很糟糕
Bad results with Emscripten compiling C++ to JavaScript & Asm.js
对于大学的课程,我必须证明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/
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 在IntelliJ IDEA中,如何将JS文件从“;查找用法“;使用TypeScript时的结果
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- Typeahead.js未显示异步结果
- async问题,JS Promise无法返回结果,但可以使用console.log
- Javascript验证(gen_validatorv4.js)-基于复选框结果
- MeteorJS从上一个函数中检索JS中的结果
- Meteor js-控制台显示'未定义'即使返回结果
- 在safari和chrome中,js图像加载产生了奇怪的结果
- 如何使用node.js和express在文件中写入结果
- Three.js CSG如何更改结果's的材质和颜色
- 无法使用streams/highland.js从mongodb的结果中获取数据
- 获取结果未定义(主干.js)
- Moment.js不显示结果
- 在Minitest中,我可以在JS页面上触发并分析结果/响应吗
- Angular JS根据搜索结果和点击事件更新DOM元素
- 使用 js 函数显示 HTML 表单的结果
- 在 sql 中求和 col,在 js 中查看结果
- 为什么这个js代码的RSA加密结果与java的RSA标准代码不同
- 如何在模态助推器中显示计算结果(JS)