使用 asm.js 将依赖于外部库的代码转换为 javascript

Posted

技术标签:

【中文标题】使用 asm.js 将依赖于外部库的代码转换为 javascript【英文标题】:Using asm.js to convert external-library-dependent code to javascript 【发布时间】:2017-04-28 09:06:33 【问题描述】:

(请注意,我仍然对 asm.js 的工作原理以及它可以“自动转换”的软件类型感到困惑,而且我仍然对从原始源自动转换堆栈中的许多术语感到困惑。 如果您觉得有必要投反对票,请善待并提出建设性意见。)

如何使用 asm.js 转换依赖于多个外部库运行的代码?

在如此复杂的依赖情况下,您将 emscripten 应用于什么?

是否有某些类别的基于 c 的软件无法使用?

例如 - pix2pix

好像因为pix2pix是基于Torch,最终使用llvm,所以这个asm.js好像可以转换吧?

【问题讨论】:

【参考方案1】:

简而言之,emscripten 将 llvm 代码(由 C++ 代码生成,但理论上可以是 llvm 支持的任何语言)并将其转换为 javascript。您可以在其论文here

中详细了解它

由此可见,它需要C++源代码编译成js。

那么 C++ 标准库呢? Emscripten 有一些 C++ 库函数的端口。你有 fileSystem 仿真(仿真是因为浏览器不允许 fs 访问 js 代码。但是在 nodejs 的情况下它可以工作),容器的实现,算法等。 不支持线程,因为它是 js 不直接支持的功能(特别是在生产浏览器中)

这也应该清楚地表明任何依赖于平台的代码都将不起作用(除非您也有源代码形式。)。

例如 pix2pix 似乎正在使用 NVIDIA CUDA 库以便能够在 GPU 上运行。这是由 NVIDIA 通过特定于平台的驱动程序提供的,因此无法将其转换为 emscripten。 但是如果这个库的核心逻辑可以独立于平台代码,并且它所依赖的每个库都可以源代码形式提供,那么创建 pix2pix 的 asm.js 端口应该是可能的。

【讨论】:

以上是关于使用 asm.js 将依赖于外部库的代码转换为 javascript的主要内容,如果未能解决你的问题,请参考以下文章

创建一个依赖外部库的 iOS8 框架

Bazel - 如何处理外部 .so 库的传递依赖关系?

如何在没有外部库的任何lua中将双精度转换为小字符串表示而不会丢失数据?

如何在 .cabal 中指定对外部 C 库的依赖?

CMake 使 add_library 依赖于 ExternalProject_Add

没有外部库的 JavaScript 自动完成