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

2022-02-09 11:04:21 +08:00
 yazoox

现在好像有一些运算,可以用 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 就不支持这样的用法?

2401 次点击
所在节点    JavaScript
3 条回复
0o0O0o0O0o
2022-02-09 11:07:39 +08:00
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
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
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/832627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX