无法调用未知功能

时间:2018-02-06 23:58:12

标签: javascript emscripten

我正在尝试使用emscripten编译中等规模的现有代码库。目前所有内容都在编译,但是当我尝试从javascript调用它时,我收到错误:

  

断言失败:无法调用未知函数InitHOG(可能LLVM优化或关闭删除了吗?)

我已将此声明为:

extern "C" {

void EMSCRIPTEN_KEEPALIVE InitHOG()
{ ... }

}

我将javascript中的函数链接到:

InitHog = Module.cwrap('InitHOG', 'void', []);

我的代码库被编译成库;函数调用库是在我的guihtml库中,最后的链接命令是:

  

emcc -o ../../../../html/debug/bidirnecessary.js ../../../../objs_html/bidirnecessary.js/debug/demos/bidirnecessary/Driver .o -lenvironments -lmapalgorithms -lalgorithms -lgraphalgorithms -lgraph -lutils -lguihtml -L ../../../../ html / debug -Lapps / libs -Ldemos / libs -lpthread -g

为什么它无法从javascript中找到我的函数的任何想法?

1 个答案:

答案 0 :(得分:0)

虽然当您将单个文件编译为.js输出时EMSCRIPTEN_KEEPALIVE关键字有效,但在我编译单个文件的makefile系统中无法工作,请使用{ {1}}创建一个库,然后在最后将所有内容链接在一起。

相反,您需要使用emar指令指定要导出的函数。所以,这样的事情可行。

  

emcc -o ../../../../html/debug/bidirnecessary.js ../../../../objs_html/bidirnecessary.js/debug/demos/bidirnecessary/Driver .o -lenvironments -lmapalgorithms -lalgorithms -lgraphalgorithms -lgraph -lutils -lguihtml -lgui -L ../../../../ html / debug -Lapps / libs -Ldemos / libs -lpthread -g -s EXPORTED_FUNCTIONS =" [' _InitHOG',' _DoFrame',' _MouseEvent']"