使用 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 的结果不佳
使用 Emscripten 将 R 函数编译为 JavaScript