使用 emscripten 构建可重用的框架

Building a reusable framework with emscripten

我有一个关于 emscripten 的初学者问题。我发现的大多数文档似乎都是关于用它构建 "programs" - 可以直接在浏览器中 运行 的东西。

我有兴趣构建一些稍微不同的东西。我想转换一个用 C 实现的现有框架,它导出 C API,作为 javascript(可能还有 WASM)的库,可以被其他 Web 应用程序下载和调用。

在 emscripten 中做这样的事情的总体方法是什么?需要哪些标志和/或选项来表达最终目标是可调用库,而不是程序?

为此你需要做的就是导出 C API 方法(例如使用 EMSCRIPTEN_KEEPALIVE 宏)并从 JS 调用它们(例如使用 ccall ).

一般来说,一个"normal"的程序和main()是完全一样的,只是main()是自动给你导出的,自动调用的。所以没有明确的 program/library 区别。 (其实带main()的程序也可以导出其他C函数,你可以从JS中调用。)

有关 ccall 等的详细信息,请参阅 https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html