脚本未定义的导出函数:

问题描述

我陷入困境,希望有人能帮忙, 我正在尝试将h264lib_opencore库构建为webasm,并且成功构建了该库,我从该大型库及其所需的依赖项中隔离了所需的功能,并通过emmake make或设置了一个.a库。 CLion中的工具链,它可以从emscripten工具链成功构建静态库.a。

但是,我认为这些函数不能正确导出,因此我使用了-s EXPORTED_FUNCTIONS命令,但是不幸的是,即使我已经向我要调用函数添加了EMSCRIPTEN_KEEPALIVE,我也得到了未定义的导出函数。 而且该功能也可以在生成的.a文件(通过十六进制编辑器)中看到。 但是当我用-s EXPORTED_FUNCTIONS执行emcc(或em ++)时,出现错误“未定义的导出函数

在这里还想念什么?

我使用的命令: em ++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS =“ ['_h264_decoder_process_first_frame']“ 错误 em ++:错误:未定义的导出函数:“ _h264_decoder_process_first_frame” [-Wundefined] [-Werror] 如果我为生成的.a库打开hexeditor,我可以看到该函数在其中,尽管它的名称类似于 _ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i

在编译之前,我还在源代码添加了int EMSCRIPTEN_KEEPALIVE h264_decoder_process_first_frame()

在这里想念什么?

解决方法

extern "C" : 防止函数名在编译时被破坏 JavaScript 代码可以使用预期的函数名

, 我得到了答案,供大家参考; 由于该文件位于CPP中,因此我只需要将extern“ C” {}放在要导出的函数中即可使用! 所以在这种情况下,如果我要导出一个函数h264_decoder_process_first_frame 我需要在头文件中做
extern "C" {
void h264_decoder_process_first_frame();
}

它现在可以导出。