现在好像有一些运算,可以用 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 就不支持这样的用法?
1
0o0O0o0O0o 2022-02-09 11:07:39 +08:00
|
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/ |
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 ``` |