javascript - 使用 emscripten 将 c++ 代码编译为 javascript 以求两个数之和。练习
问题描述
我想举一个简短的例子来了解emscripten是如何工作的。我想制作一个html,我可以在两个不同的文本框中添加两个数字。我还添加了一个按钮和第三个文本框,在我在上面引入两个数字并按下按钮后应该打印结果。
解决方案
我发现您的项目存在一些问题。首先,我认为你应该像这样标记 C++ 函数EMSCRIPTEN_KEEPALIVE
:
int EMSCRIPTEN_KEEPALIVE int_sum_of_two_numbers(int number1, int number2)
{
int sum;
sum = number1 + number2;
return sum;
}
如果您的函数在其他函数中使用,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 应用程序无关。
我不久前写了一篇关于将 WebAssembly 与 Angular 集成的文章,它与您想要实现的目标非常相似。我认为这值得一读。
推荐阅读
- java - Java - 从以字符串形式出现的字节下载 PDF?
- python - 如何在 Django 中更新查询集中所有对象的字段值?
- python - 如何减少比较来自两个不同数据帧的两个句子的函数中的处理时间?
- javascript - Js在一定时间后显示元素 WITH 转换
- go - 为什么这个语句是不可访问的?
- statistics-bootstrap - boot.ci() 无法计算 F1 分数的置信区间
- bash - zsh 奇怪的管道行为(与 bash 相比)
- ios - Swift:如何清除 collectionView 以便在 collectionViewCell 中重用
- if-statement - 错别字3。如何根据语言条件改变流畅的节奏
- angular - SignalR错误:无法启动连接:错误:客户端支持的传输均不受服务器支持