soluna 外挂 C 模块
💡
原文中文,约3000字,阅读约需8分钟。
📝
内容提要
为了解决 soluna 静态链接 Lua 导致无法加载 C 扩展的问题,采用代理动态库的方法,将 Lua C API 转发到内部实现。新方案通过链接 extlua.c 注入 Lua C APIs,允许外部库正常加载。使用时只需调用 soluna.extlib 加载库,确保动态和静态链接均可正常工作。
🎯
关键要点
- soluna 默认将 Lua 库静态链接,导致无法加载 C 扩展。
- 静态链接会导致进程中有多份 Lua 实现,可能引发运行时错误。
- Lua 5.4 后,空对象被移入 lua_State 结构,减少错误链接的风险。
- 为解决静态链接问题,采用代理动态库的方法转发 Lua C API。
- 外部库需实现简单入口函数,链接 soluna 项目中的 extlua.c 作为 API 代理。
- 通过 luaapi_init() 注入 Lua C APIs,确保动态加载外部库。
- soluna.external.load 构建空 Lua 虚拟机并注入 C APIs,完成动态加载。
- 使用 soluna.extlib 加载外部库,确保动态和静态链接均可正常工作。
➡️