首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的导出函数:

未定义的导出函数:
EN

Stack Overflow用户
提问于 2020-09-14 03:54:19
回答 2查看 2K关注 0票数 5

我被困住了,我希望有人能帮我,我正在尝试构建h264lib_opencore库来构建webasm,我成功地构建了它,我从这个庞大的库中分离出了我需要的函数和它的依赖项,并通过emmake,或者在CLion中设置工具链,从它构建了一个.a库,它可以成功地从emscripten工具链构建静态库.a。

但是,我不认为这些函数是正确导出的,所以我使用了-s EXPORTED_FUNCTIONS命令,但不幸的是,我得到了未定义的导出函数,尽管我已经在试图调用的函数中添加了一个EMSCRIPTEN_KEEPALIVE。这个函数也可以在生成的.a文件(通过十六进制编辑器)中看到。但是当我使用emcc (或em++)处理-s EXPORTED_FUNCTIONS时,我得到了一个错误“未定义的导出函数”

我还错过了什么?

我使用的命令:

代码语言:javascript
复制
em++ libH264lib_opencore.a -o H264lib_opencore.js -s EXPORTED_FUNCTIONS="['_h264_decoder_process_first_frame']"

错误

代码语言:javascript
复制
em++: error: undefined exported function: "_h264_decoder_process_first_frame" [-Wundefined] [-Werror]

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

代码语言:javascript
复制
_ZN16h264lib_opencore32h264_decoder_process_first_frameEPvS0_iS0_iPiS1_i

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

我在这里错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2020-09-14 06:40:35

我有一个答案供大家参考;因为文件在CPP中,我只需要将extern "C" {}放到我正在导出的函数中,它就能工作了!

因此,在本例中,如果要导出函数h264_decoder_process_first_frame,则需要在头文件中执行

代码语言:javascript
复制
extern "C" {
void h264_decoder_process_first_frame();
}

现在可以出口了。

票数 4
EN

Stack Overflow用户

发布于 2021-01-05 07:11:47

extern "C“:防止函数名在编译时损坏,以便JavaScript代码可以使用预期的函数名。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63877873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档