无法绑定emscripten中的功能

时间:2018-07-14 21:12:57

标签: javascript c++ clang llvm emscripten

我正在尝试使用emscripten从js调用我的c / c ++函数。为此,我指的是本教程:https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/embind.html#embind

我正在遵循本文中提到的过程,但是lerp函数没有导出到Module,并且我在浏览器控制台中得到了TypeError: Module.lerp is not a function

我只是使用本文中提到的文件而没有进行任何修改,但是仍然无法从js调用c函数。

请帮助我我所缺少的内容

// quick_example.cpp
#include <emscripten/bind.h>

using namespace emscripten;

float lerp(float a, float b, float t) {
    return (1 - t) * a + t * b;
}

EMSCRIPTEN_BINDINGS(my_module) {
    function("lerp", &lerp);
}

index.html

<!doctype html>
<html>
  <script src="quick_example.js"></script>
  <script>
    console.log('lerp result: ' + Module.lerp(1, 2, 0.5));
  </script>
</html>

构建说明:

emcc --bind -o quick_example.js quick_example.cpp

运行本地服务器

pyhton -m SimpleHTTPServer 9000

在浏览器上,启动此页面时,出现此错误。

TypeError: Module.lerp is not a function

谢谢

3 个答案:

答案 0 :(得分:0)

我认为您需要将lerp函数放在EXPORTED_FUNCTIONS命令行选项中

EXPORTED_FUNCTIONS = ['lerp']

此外,您可能希望在代码中使用EMSCRIPTEN_KEEPALIVE批注以防止内联,但是EXPORTED_FUNCTIONS应该足够了。参见:

https://kripken.github.io/emscripten-site/docs/getting_started/FAQ.html#why-do-functions-in-my-c-c-source-code-vanish-when-i-compile-to-javascript-and-or-i-get-no-functions-to-process

答案 1 :(得分:0)

初始化尚未完成。

function eachColor(callback) {
  for (let i = 0, n = this._dta.length; i < n; i += 4) {
    callback(this.getColorAtIndex(i), i)
  }
}

function setColorAtIndex(index, color) {
  this._dta[index] = color.red
  this._dta[index + 1] = color.green
  this._dta[index + 2] = color.blue
  this._dta[index + 3] = color.alpha
}

function getColorAtIndex(index) {
  return color.rgb(this._dta[index], this._dta[index + 1], this._dta[index + 2], this._dta[index + 3])
}

答案 2 :(得分:0)

问题以emscripten打开: https://github.com/kripken/emscripten/issues/6859

到那时我们可以使用@zakki建议的方法来实现