Emscripten似乎不使用asm.js
Emscripten seems to not use asm.js
我在emscripten文档中读到emscripten默认编译为asm.js优化,但如果我打开编译后的代码,我找不到任何"使用asm;"如何获得它?我应该手动添加还是编译错误?
目前我正在使用"emccmain.c-o out.html"进行编译,也尝试过使用-02标志。
这是经过设计的。有时它会生成(参见源代码("almost asm"
而不是"use asm"
,这会禁用所有asm.js优化。当编译后的代码使用了一些浏览器中没有实现的功能(如v8版本(时,就会发生这种情况。对于我现在正在进行的项目,我已经用"use asm"
替换了Firefox的"almost asm"
,并对Chrome保持原样,因为"use asm"
在一开始就造成了严重的速度减慢。
因此,用"use asm"
替换"almost asm"
是不安全的,但有时这还可以。你应该在你必须支持的所有浏览器版本中仔细测试你的应用程序(但要确保你在测试时关闭了devtools(-如果它有效,这意味着你有一个已经实现的幸运案例:继续替换。
不是最好的解决方案,但我用"use asm"替换了"几乎asm",它可以与Firefox一起使用(编译正确,测量速度更快(。
我也一直在寻找一个让Emscripten自己做这件事的解决方案,但没有找到解决方案。
这应该很容易,但如果您尝试了许多不同的版本,则可能有来自不同版本的配置文件需要修复。我把它编译成asm.js的方法是转到以前的版本,默认情况下生成asm.js(1.38.48是最后一个默认情况下打开fastcomp的版本,这是编译成asm.js所必需的(,然后确保所有路径都是正确的,并添加一些编译参数:
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
emsdk install 1.38.48
emsdk activate 1.38.48
source emsdk_env.sh
EMCC_DEBUG=1 emcc -v
如果最后一个命令显示:
共享:调试:EMCC_WASM_BACKEND告诉我们使用WebAssembly后端
当你去构建时,它会有一个错误:
shared:CRITICAL:WebAssembly设置为目标,但LLVM尚未使用WebAssembly后端构建
因此,您需要确保LLVM在.emscripten
文件中正确指向上游,并且emscripten根目录是正确的:
LLVM_ROOT= 'path/to/emsdk/upstream/fastcomp/bin'
EMSCRIPTEN_ROOT='path/to/emsdk/upstream/emscripten'
EMCC_WASM_BACKEND = 0
如果您仍然收到关于EMCC_WASM_BACKEND的错误,说明它仍在使用WebAssembly,它可能是一个环境变量,您可以使用python进行检查脚本:
import os
for name, value in os.environ.items():
print("{0}: {1}".format(name, value))
如果值不同,则将其更改为:
export EMCC_WASM_BACKEND=0
export EMSCRIPTEN=/path/to/emsdk/upstream/emscripten
现在当运行EMCC_DEBUG=1 emcc -v
时,它应该说:
共享:调试:EMCC_WASM_BACKEND告诉我们使用asm.js后端
没有错误,使用构建
emcc -s WASM=0 --separate-asm -s WASM_BACKEND=0 -o build/asmjs.js main.c
如果需要,也可以输出build/asmjs.html。
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- asm.js如何处理除以零
- 如何检查Firefox是否使用asm.js代码
- 有没有一种方法可以验证asm.js代码
- Emscripten似乎不使用asm.js
- Emscripten 编译C++ 到 JavaScript 和 Asm.js 的结果很糟糕
- ASM.js 类型错误:比较的参数必须同时是有符号、无符号或双精度
- 在普通javascript中插入ASM.JS代码
- 手工编写asm.js
- 当asm.js比普通JS代码快的时候,我为什么要用JS写新代码呢?
- Asm.js对编译器的限制
- 为什么asm.js会降低性能
- 了解Emscripten/ASM.js和浏览器沙盒
- 可以将常规的JavaScript转换为asm.js吗,还是只是为了加速静态类型的低级语言?
- asm.js模块.调用/模块.cwrap回调
- asm.js和WebAssembly的区别是什么?
- TypeError: asm.js类型错误:被调试器禁用
- 为什么asm.js项目在Chrome中的运行速度比FireFox快
- 如何使用asm.js进行测试和开发