V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX  ›  JavaScript

WebAssembly 能够调用另外一个 WebAssembly 么?

  •  
  •   yazoox · 2022-02-09 11:04:21 +08:00 · 2349 次点击
    这是一个创建于 808 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在好像有一些运算,可以用 c++编写,然后编译成 web assembly ,再用 javascript 去调用这个 web assembly 里面的方法 /API

    现在有个问题,用 c++编写功能,这个功能可能有 dependency 。需要把这个 dependency 也改写成 web assembly 。 但是 wasm ( Web Assembly ),能够直接调用另外一个 wasm 么?

    就好像在 windows 下面,我的程序调用了 windows.dll 下的一个 API ,这个 API 又调用了 system.dll 下面的 API 。

    否则,如果我要用 c++开发功能,我得把所有的代码,都移动到这一个项目 /文件里面来,统一编译成 wasm ,这样就太麻烦了。也不利于代码重用......

    有没有相关的文档介绍这样的用法?还是说,现在 web assembly 就不支持这样的用法?

    3 条回复    2022-02-09 13:22:48 +08:00
    0o0O0o0O0o
        1
    0o0O0o0O0o  
       2022-02-09 11:07:39 +08:00
    12101111
        2
    12101111  
       2022-02-09 12:56:02 +08:00
    静态链接, 把 dependency 都编译成.a, 然后连接成一个 wasm 文件.
    动态链接的草案还不能用 https://github.com/WebAssembly/module-linking/blob/main/design/proposals/module-linking/Explainer.md
    至少没有浏览器支持: https://webassembly.org/roadmap/
    sillydaddy
        3
    sillydaddy  
       2022-02-09 13:22:48 +08:00
    > “。。如果我要用 c++开发功能,我得把所有的代码,都移动到这一个项目 /文件里面来,统一编译成 wasm ,这样就太麻烦了。也不利于代码重用。。”

    就像 2 楼说的,可以用库的形式。如果 C++是用 makefile 编译的话,几乎完全不用改动:
    https://emscripten.org/docs/compiling/Building-Projects.html#using-libraries

    ```
    # Compile libstuff to libstuff.a
    emconfigure ./configure
    emmake make

    # Compile project to project.o
    emconfigure ./configure
    emmake make

    # Link the library and code together.
    emcc project.o libstuff.a -o final.html
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1467 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:01 · PVG 01:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.