问题标签 [webassembly]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
588 浏览

javascript - 如何使用最新的 Node.js 在 webassembly 上运行“hello world”?

我在阅读官方文档但没有找到此信息后提出这个问题。

我在 Node.js 上v8.1.3。如何在 Node.js 上的 JavaScript 中在 wast(WebAssembly 的文本表示)上编译和运行“hello world”?

0 投票
2 回答
11058 浏览

c++ - Emscripten - cmake - 在 CMakeList 文件中传递 emscripten 选项

如何使用emcmake cmake和传递 emscripten 命令行选项?

对 c++ / CMake 很陌生,但在谷歌上找不到任何有用的东西。所以也许这个问题只是愚蠢的,在这种情况下我道歉。

我可以使用以下 CMakeList.txt 文件构建我的项目(非 webassembly/普通桌面)

对于网络(程序集)

但是不应该可以使用emcmake cmake并将其全部保存在(单个)CMakeList 文件中吗?如果我执行emcmake cmake && make它会很快生成一个文件,但它就像空的一样好(丢失所有文件)。

我猜它可能归结为如何在 CMakeFile 中将参数传递给 emscripten ......

使用 Emscripten (Emcmake) 时Emscripten和问题指定选项的CMake 项目重复

但是设置SET_TARGET_PROPERTIES(Engine PROPERTIES LINK_FLAGS "-s SAFE_HEAP=1")只给出以下类型的错误:

所以真的..我错了 emcmake 如何工作,如果没有,我如何在 CMakeList 文件中传递 emscripten 参数?

非常感谢!

0 投票
1 回答
1259 浏览

emscripten - WebAssembly LinkError:_sprintf 函数导入需要可调用

在 JS 中从 Emscripten 编译的 WASM创建WebAssembly.Instance ,其中包括对sprintf的调用,会导致此错误:

未捕获(承诺中) LinkError: WebAssembly.Instance(): Import #1 module="env" function=" _sprintf " 错误:函数导入需要可调用的...

Emscripten不包含sprintf作为 libc 的一部分吗?

编码:

编译命令:

emcc编译运行没有错误。

注释掉sprintf行运行没有错误,按预期返回 0。

这个错误的原因是什么,在使用 sprintf 时如何避免?

0 投票
1 回答
319 浏览

emscripten - 在以“MODULARIZE=1”导出的 Emscripten WebAssembly 模块中为外部函数提供 JS 函数?

当使用 emcc 的 MODULARIZE=1 选项时,有没有办法为 extern sendToJs函数提供函数:

emcc 编译命令

测试.cpp

Javascript

0 投票
2 回答
4081 浏览

javascript - 如果缓冲区大小大于 4KB,则主线程上不允许 WebAssembly.Compile

我正在尝试一个简单的 hello world WebAssembly 示例,但无法理解我在 Chrome 59 中看到的错误:

RangeError:如果缓冲区大小大于 4KB,则主线程上不允许 WebAssembly.Compile。使用 WebAssembly.compile,或在工作线程上编译。

我已按照本教程中的步骤进行操作,并且可以毫无错误地构建所有内容。我正在使用create-react-app 重新接线wasm-loader

如果我使用的是计数器模块的本地版本,则会收到我在开头提到的错误。如果我尝试使用预构建的版本(例如这个项目中的那个),它可以正常工作。

当我构建我的模块时,我使用的命令与教程中指定的相同。具有工作模块的项目在其 README 中列出了相同的命令:

知道可能导致错误的原因吗?

0 投票
5 回答
9032 浏览

javascript - 我可以以某种方式构建 webassembly 代码*没有* emscripten“胶水”吗?

我能否以某种方式创建一个 wasm 文件,该文件将按照 MDN 此处的描述自行工作(通过实例化对象并在其上调用函数)?

我能找到的所有指南(例如 MDN 上的这个)都推荐使用 emscripten;然而,这也将包括约 70kB 的“胶水代码”(具有约 50kB 的可选文件系统仿真),具有附加逻辑(如检测节点/浏览器环境和自动获取等),可能还有其他一些仿真。

如果我不想要那个“胶水代码”并且只想直接创建 WASM(可能来自 C 代码,但也可能是其他东西)怎么办?现在有可能吗?

0 投票
2 回答
3205 浏览

javascript - 从 JavaScript 调用 WebAssembly 中的 C 样式函数指针

有什么方法可以访问 WebAssembly 模块中的函数指针?

例如,给定以下编译为 WebAssembly 的“模块”:

JavaScript 中的实现是否可以do_callback调用回调而不必依赖中间 C 函数导出来执行实际的函数调用?

通过中间函数导出,我的意思是我可以添加一个公开可见的内部函数。

然后 JavaScriptset_callback函数可以通过委托do_callback函数调用函数指针。

但是,最好不要通过显式间接执行此操作,是否可以使用函数表?

0 投票
1 回答
625 浏览

clang - 在 Web 程序集中生成内存和表导入/导出

使用 LLVM/Clang 编译到 WebAssembly 的默认代码生成导出内存并完全忽略表。

当使用 clang ( ) 定位 Web 程序集时,有没有办法发出内存和表导入(和/或导出--target=wasm32-unknown-unknown-wasm)?

0 投票
1 回答
388 浏览

emscripten - emscripten 生成的 invoke_* 函数的用途

当编译成 WebAssembly 时,emscripten 会生成类似invoke_vii. 他们的目的是什么?

细节:

从 C 编译的 WebAssembly 模块emcc -s WASM=1 -g期望宿主环境提供各种功能。

我正在开发一个用 C 编写的 WebAssembly 解释器。所以我必须处理提供这些功能,但我对 , 之类的功能感到invoke_vii目瞪口呆invoke_iiii

后缀显然与调用签名有关。例如,vii表示返回void并取一些ints。名称调用表明该函数应该调用某些东西。

除了在 emscripten 生成的 Java Script 代码中的实现之外,我找不到有关这些函数的信息:

dynCall_ii存在于 WebAssembly 模块中。

似乎所有invoke_*功能都是指示解释器运行相应的dynCall_*功能。这种间接的目的是什么?为什么 WebAssembly 代码不dynCall_直接调用?

0 投票
2 回答
18516 浏览

c++ - 我可以使用 Webassembly 从磁盘读取文件吗?

我遵循了 Webassembly 入门教程http://webassembly.org/getting-started/developers-guide/

它工作正常并显示“你好,世界!” 浏览器中的消息。

然后我尝试了一个小的 C++ 代码,它打开一个文本文件并在读取文件后进行计算 (10 * 20)。

emcc 编译的文件很好,没有错误。

但是当我通过运行 emrun 通过 HTTP 提供文件时,它无法打开文件。

这是我在 emrun Web 控制台中看到的:

从本地磁盘打开文件有什么限制吗?