【问题标题】:C emscripten WASM: Hello WorldC emscripten WASM:Hello World
【发布时间】:2020-01-25 14:02:08
【问题描述】:

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

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 记录到控制台?谢谢。

【问题讨论】:

  • Wasm 当然是在网页加载的浏览器中运行的。在许多应用程序中,网页会显示与应用程序相关的内容。在简单的教程中,页面可以是空白的。没错,wasm 工具基本上是丑陋的。
  • 我想要的当然是让网页显示与我定义的应用程序相关的内容。通常,扩展一个最小的示例比编辑一个完整的现有应用程序更容易。您是否知道任何此类最新且有效的最小教程?

标签: c webassembly emscripten


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多