使用 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
我有一个关于 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