IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:静态链接

共 1 篇相关文章

IT 累计浏览 33

soluna 外挂 C 模块

soluna 默认静态链接 Lua 虚拟机,导致无法直接外挂动态链接的 C 扩展,因为动态链接会引入多份 Lua 实现,引发运行时错误。根源在于 Lua 中全局空对象的静态引用机制:多份实现会生成多个空对象,运行时比较时出现不一致。虽然 Lua 5.4 后将空对象移入运行期结构以缓解问题,但作者仍强调应避免多份实现。Windows 平台因 DLL 必须编译时绑定所有符号,问题尤为突出。 为解决此问题,soluna 采用新方案:外部 C 扩展库链接代理模块 extlua.c,该模块不依赖 Lua 内部实现,而是利用 lua_getextraspace 宏注入 Lua C APIs。外部库需定义 extlua_init 入口函数,在其中调用 luaapi_init 注入 APIs,再通过 luaL_newlib 注册模块函数。soluna 的加载器通过创建临时虚拟机、传递 APIs 引用并复制入口表来完成动态加载。这种方法同时兼容动态库