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 加载外部库,确保动态和静态链接均可正常工作。
➡️

继续阅读