在FreeSWITCH中新增C文件后重载模块出现函数引用错误
FreeSWITCH自定义核心函数调用报错:No reference to function
核心原因
编译阶段无报错但运行时找不到函数,本质是自定义模块未链接到包含新函数的FreeSWITCH核心库,或新代码未被正确编译进核心库。
排查修复步骤
确认新文件已加入核心库编译列表
检查src/Makefile.am,确保你的新.c文件被添加到libfreeswitch_la_SOURCES中,示例:libfreeswitch_la_SOURCES = switch_core_hash.c switch_core_session.c ... your_new_file.c修改后必须执行
./bootstrap.sh && ./configure重新生成配置文件,不要直接编辑Makefile.in,避免配置不同步。确保模块链接核心库
打开自定义模块目录下的Makefile.am(如src/modules/my_module/Makefile.am),确认mod_my_module_la_LIBADD包含核心库依赖:mod_my_module_la_LIBADD = $(top_builddir)/src/libfreeswitch.la此配置保证模块编译时会链接到包含新函数的核心库,否则仅靠头文件声明只会在编译阶段通过,运行时找不到实现。
检查函数的对外可见性
在头文件中声明函数时,必须使用FreeSWITCH的导出宏SWITCH_DECLARE或SWITCH_API,确保函数能被外部模块访问,示例:// your_new_file.h SWITCH_DECLARE(switch_status_t) my_custom_function(switch_core_session_t *session);未添加宏的函数默认是内部可见,模块无法调用。
全量重新编译
从FreeSWITCH根目录执行make clean && make && make install,彻底清理旧编译产物,确保核心库和模块都基于最新代码重新编译链接。正确重载模块
在fs_cli中先执行unload mod_my_module,再执行load mod_my_module,避免重载时加载旧版本模块。
内容的提问来源于stack exchange,提问作者Nirvita Manek
相关产品推荐
相关产品推荐

