首页 > 解决方案 > C emscripten WASM:Hello World

问题描述

在过去的几个月里,我尝试创建一个 Web 程序集 hello world,但没有成功。我已经阅读了 7 个教程,观看了 4 个 YouTube 视频,并阅读了大量关于 WASM 和 emscripten 的文档。出于这个问题的目的,我将专注于emscripten 文档教程,因为希望大多数人都熟悉它。根据教程,我有:

hello_world.c

#include <stdio.h>

int main() {
    printf("hello world\n");
    return 0;
}

编译:

./emcc tests/hello_world.c

并成功测试

node a.out.js

我还生成了一个 html 输出:

./emcc tests/hello_world.c -o hello.html

并且(如果我使用 Python 服务)这已在浏览器中成功测试。

在这一点上,本教程似乎认为它已经完成,并转向更高级的主题,如文件处理。但这不可能是正确的:生成的 html 长度超过 1000 行,显然会导致数百个副作用(预期的行为只是一个空白页面,如果您检查元素,应该显示一个控制台日志“hello world”。但是这个 html 文件呈现一个完整的网页)。

我想要一个 hello world 示例的原因是为了测试 wasm 是否正常工作,然后能够开始修改和扩展示例。如果我想修改这个网页,我不知道从这个庞大的 HTML 文件的哪里开始。

编辑:也许我应该补充一下,我知道还生成了一个大的 js '胶水代码'文件。如果有办法钩入胶水,我对此很满意。我目前不知道这个 html 或其中的脚本如何与 js 胶水交互。

所以我的问题是,我需要做什么才能拥有一个包含几行 html 的 HTML 文件和一个调用 main 函数的小内联脚本,然后将 hello world 记录到控制台?谢谢你。

标签: cwebassemblyemscripten

解决方案


emcc -s MINIMAL_RUNTIME=1产生小的输出。

要修改 html,请将其复制emscripten/X.Y.Z/src/shell_minimal_runtime.htmlmyshell.html并用作自定义 shell:

emcc tests/hello_world.c -o hello.html --shell-file myshell.html

如果您需要标准运行时,emcc ... --shell-file .../emscripten/src/shell_minimal.html可能会工作。


推荐阅读