无法调用未知函数

Cannot call unknown function

我正在尝试使用 emscripten 编译中型现有代码库。当前所有内容都可以编译,但是当我尝试从 javascript 调用它时,出现错误:

Assertion failed: Cannot call unknown function InitHOG (perhaps LLVM optimizations or closure removed it?)

我声明为:

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 找到我的函数的任何想法?

虽然 EMSCRIPTEN_KEEPALIVE 关键字在您将单个文件编译为 .js 输出时有效,但它 在我编译单个文件的 makefile 系统中不起作用 , 用 emar 做一个库, 然后 link 最后把所有东西都放在一起.

相反,您需要使用 -s 指令来指定要导出的函数。所以,像这样的东西是可行的。

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']"