使用 emscripten 将 c++ 代码编译为 javascript 以求两个数之和。练习

Posted

技术标签:

【中文标题】使用 emscripten 将 c++ 代码编译为 javascript 以求两个数之和。练习【英文标题】:Using emscripten to compile c++ code to javascript for making the sum of two numbers.Practice 【发布时间】:2018-08-21 10:52:17 【问题描述】:

我想通过一个简短的示例来了解 emscripten 的工作原理。 我想制作一个 html 我可以在两个不同的文本框中添加两个数字。我还添加了一个按钮和第三个文本框,在我在上面引入两个数字并按下按钮后应该打印结果。

【问题讨论】:

Emscripten 是否需要main 是的,它需要。 你试过这个教程了吗? (kripken.github.io/emscripten-site/docs/getting_started/…) 有了这个教程,我就开始了。 【参考方案1】:

我发现您的项目存在一些问题。首先,我认为您应该像这样使用EMSCRIPTEN_KEEPALIVE 标记C++ 函数:

int EMSCRIPTEN_KEEPALIVE int_sum_of_two_numbers(int number1, int number2)

    int sum;
    sum = number1 + number2;
    return sum; 

来自Emscripten documentation:

如果您的函数在其他函数中使用,LLVM 可能会内联它,并且它不会在 javascript 中作为唯一函数出现。通过使用 EMSCRIPTEN_KEEPALIVE 定义函数来防止内联

这允许 Javascript 代码找到您的 C++ 函数。

除此之外,当您提到导出函数_int_sum_of_two_numbers => int_sum_of_two_numbers 时,用于编译项目的命令似乎有一个额外的下划线_ 字符。所以你应该使用:

EXPORTED_FUNCTIONS='["int_sum_of_two_numbers"]'

最后一点,您可以将main() 函数留空。该函数中的代码与您的 Web 应用程序无关。

我不久前写了一篇关于integrating WebAssembly with Angular 的文章,它与您想要实现的目标非常相似。我认为这值得一读。

【讨论】:

如果您仍然有问题,那么也许您应该添加有关您的 html 页面的更多信息。我在该代码中没有看到对生成的wasm 文件的任何引用。

以上是关于使用 emscripten 将 c++ 代码编译为 javascript 以求两个数之和。练习的主要内容,如果未能解决你的问题,请参考以下文章

Emscripten 将 C++ 编译为 JavaScript 和 Asm.js 的结果不佳

使用 emcc 将 C++ 代码编译为 WASM 的问题

如何在浏览器中将 C++ 编译为 JavaScript?

使用 Emscripten 将 R 函数编译为 JavaScript

Emscripten 中的“Module”变量机制,同时将 Pthread 编译为 worker

如何使用 Emscripten 将 Hello Word 从 Swift 编译为 JavaScript