emscripten 未定义的导出函数:

use*_*947 5 emscripten webassembly

我被困住了,我希望有人可以提供帮助,\n我正在尝试为 webasm 构建 h264lib_opencore 库,并且成功构建了它,我从这个庞大的库及其依赖项中分离出了我需要的功能,并构建了一个 .a通过 emmake make 或在 CLion 中设置工具链,它可以从 emscripten 工具链成功构建静态库 .a。

\n

但是,我不\xe2\x80\x99t 认为函数已正确导出,因此我使用了该-s EXPORTED_FUNCTIONS命令,但不幸的是,即使我已经在我EMSCRIPTEN_KEEPALIVE尝试调用的函数中添加了 a ,但我还是得到了未定义的导出函数。\n并且该函数可以也可以在生成的 .a 文件中看到(通过十六进制编辑器)。\n但是当我执行emcc(或em++)操作时-s EXPORTED_FUNCTIONS,我收到错误 \xe2\x80\x9cundefined 导出函数\xe2\x80\x9d

\n

我在这里还缺少什么?

\n

我使用的命令:

\n
em++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS="['_h264_decoder_process_first_frame']"\n
Run Code Online (Sandbox Code Playgroud)\n

错误

\n
em++: error: undefined exported function: "_h264_decoder_process_first_frame" [-Wundefined] [-Werror]\n
Run Code Online (Sandbox Code Playgroud)\n

如果我打开生成的 .a 库的十六进制编辑器,我可以看到该函数就在那里,尽管名称类似于

\n
_ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i\n
Run Code Online (Sandbox Code Playgroud)\n

int EMSCRIPTEN_KEEPALIVE h264_decoder_process_first_frame()还在编译之前在源中添加了

\n

我在这里缺少什么?

\n

use*_*947 7

我有一个答案供大家参考;由于该文件位于 CPP 中,我只需要将extern "C" {}其放入要导出的函数中即可运行!

所以在这种情况下,如果我要导出一个函数,h264_decoder_process_first_frame 我需要在头文件中执行

extern "C" {
void h264_decoder_process_first_frame();
}
Run Code Online (Sandbox Code Playgroud)

现在可以导出了。