IT虾米网

javascript之无法调用未知函数

txw1958 2024年05月22日 程序员 49 0

我正在尝试使用 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 创建一个库,然后最后将所有内容链接在一起。

相反,您需要使用 -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']"


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!