我被困住了,我希望有人能帮我,我正在尝试构建h264lib_opencore库来构建webasm,我成功地构建了它,我从这个庞大的库中分离出了我需要的函数和它的依赖项,并通过emmake,或者在CLion中设置工具链,从它构建了一个.a库,它可以成功地从emscripten工具链构建静态库.a。
但是,我不认为这些函数是正确导出的,所以我使用了-s EXPORTED_FUNCTIONS命令,但不幸的是,我得到了未定义的导出函数,尽管我已经在试图调用的函数中添加了一个EMSCRIPTEN_KEEPALIVE。这个函数也可以在生成的.a文件(通过十六进制编辑器)中看到。但是当我使用emcc (或em++)处理-s EXPORTED_FUNCTIONS时,我得到了一个错误“未定义的导出函数”
我还错过了什么?
我使用的命令:
em++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS="['_h264_decoder_process_first_frame']"错误
em++: error: undefined exported function: "_h264_decoder_process_first_frame" [-Wundefined] [-Werror]如果打开生成的.a库的十六进制编辑器,我可以看到函数就在里面,尽管命名类似于
_ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i在编译之前,我还在源代码中添加了int EMSCRIPTEN_KEEPALIVE h264_decoder_process_first_frame()。
我在这里错过了什么?
发布于 2020-09-14 06:40:35
我有一个答案供大家参考;因为文件在CPP中,我只需要将extern "C" {}放到我正在导出的函数中,它就能工作了!
因此,在本例中,如果要导出函数h264_decoder_process_first_frame,则需要在头文件中执行
extern "C" {
void h264_decoder_process_first_frame();
}现在可以出口了。
发布于 2021-01-05 07:11:47
extern "C“:防止函数名在编译时损坏,以便JavaScript代码可以使用预期的函数名。
https://stackoverflow.com/questions/63877873
复制相似问题