Kamailio 5.5.2编译app_lua模块出现luaL_openlib未声明错误如何解决?
问题根本原因
Kamailio 5.5.2 版本的 app_lua 模块默认适配 Lua 5.1/5.2 版本,你本地安装的 Lua 5.4.3 版本过高:luaL_openlib 函数在 Lua 5.2 之后就被标记为弃用,Lua 5.4 版本已经完全移除该API,因此编译时报未定义函数的错误。
解决方案
按实现难度从低到高排序,任选其一即可:
方案1:降级Lua版本(最推荐,无需修改源码)
- 先卸载本地已安装的 Lua 5.4.3 版本,避免头文件、库文件冲突
- 安装 Lua 5.1 版本及开发包:
- Debian/Ubuntu 系系统执行:
apt install lua5.1 liblua5.1-dev - CentOS/RHEL 系系统执行:
yum install lua-devel-5.1*
- Debian/Ubuntu 系系统执行:
- 回到 Kamailio 源码目录,重新指定Lua版本编译:
编译前也可以检查make clean make all LUA=5.1src/modules/app_lua/Makefile中的LIBLUA、LUAINC参数,确认指向Lua5.1的对应路径。
方案2:修改app_lua源码适配Lua5.4
如果必须使用Lua5.4版本,可以手动修改报错的API调用:
- 打开
src/modules/app_lua/app_lua_api.c文件,定位到1942行的报错代码:luaL_openlib(L, "KSR", _sr_crt_KSRMethods, 0); - 将上述单行代码替换为Lua5.4兼容的写法:
lua_newtable(L); luaL_setfuncs(L, _sr_crt_KSRMethods, 0); lua_setglobal(L, "KSR"); - 保存文件后重新执行
make all编译即可。如果后续出现其他同类API弃用报错,可参照Lua5.4官方API对应调整。
方案3:升级Kamailio版本
Kamailio 5.6及更高版本的app_lua模块已经完成Lua5.4的API适配,如果业务允许升级Kamailio版本,直接替换为更高版本的源码编译即可解决问题。
内容的提问来源于stack exchange,提问作者mike.tihonchik
相关产品推荐
相关产品推荐

