• 军秋
    2020-10-06
    使用llc编译后可以在浏览器中运行了吗?好emscripten编译上有什么差异?

    作者回复: 可以使用,不过只能够使用没有系统调用的 Wasm 模块版本,对 wasi-libc 的支持目前还不是很完善。相比 Emscripten 来说,直接使用 LLVM 的版本会有比较多的冗余字节码,且编译流程较为复杂,比如需要使用单独的 wasm-ld 进行链接以导出 C/C++ 代码中的函数。而 Emscripten 则会帮助你简化整个编译流程到 emcc 中,同时也会自动生成可用的 JavaScript Glue 来帮助你简化 Wasm 模块的使用方式。相较之下,LLVM 就不会帮你去模拟 Web 上的 POSIX 环境了。因此诸如 fopen 这些函数在通过 LLVM 编译到 Wasm 后就无法直接在 Web 浏览器上使用了。

    共 2 条评论
    4
  • 施天助
    2022-05-03
    请教于老师,我mac里没有wasm32 或 wasm64的目标怎么安装呢? 有其他同学知道吗

    作者回复: 这两个都是虚拟 ISA,不跟你计算机的实际硬件结构绑定。你在编译 LLVM 的时候应该可以选择是否启用 Wasm 作为后端目标。可以参考这里:https://gist.github.com/yurydelendik/4eeff8248aeb14ce763e

    
    
  • 鹦鹉
    2020-10-02
    类似操作系统的 32 位与 64 位之分. 简而言之, wasm32 与 wasm64 的区别主要在于内存寻址范围的不同, 对于 wasm32 仅能对 2 的 32 次方(大约 4GB) 的线性内存范围进行寻址, 而 wasm64 能够在更大范围的内存中寻址. 虽然现在我们的操作系统基本都是 64 位, 但对于 wasm 来说, 区分 wasm32 和 wasm64 两个编译目标的主要的原因在于: 绝大多数 wasm 应用都不需要使用到超过 4GB 的内存. 参考: https://webassembly.org/docs/faq/
    
    7
  • 一步
    2020-10-07
    llc add.ll -filetype=obj -mtriple=wasm64 -o add1.wasm 在 Mac 平台 执行这行命令,生成 wasm64 的目标代码,提示 不支持的 LLVM ERROR: 64-bit WebAssembly (wasm64) is not currently supported 版本信息: LLVM (http://llvm.org/): LLVM version 10.0.1 Optimized build. Default target: x86_64-apple-darwin19.3.0 Host CPU: skylake
    
    3
  • 一步
    2020-10-07
    存在 wasm32 和 wasm64的平台, 应该可以操作系统 中存在64和32 位的原因是一样的 1: 64 有更大的 CPU 位宽,可以进行更大的数值的计算 2: 内存寻址空间大小不一样
    
    1