我正在尝试使用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中找到我的函数的任何想法?
答案 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']"