应用二进制接口

lua-users home
wiki

一个 [应用二进制接口 (ABI)] 是在二进制级别上函数之间的接口。Lua 中的 ABI 兼容性通常意味着用一个 Lua 实例编译的二进制模块可以在另一个 Lua 实例中工作,而无需重新编译任何内容。

"通常,新的 Lua 版本 [例如 4.0、5.0、5.1、5.2 等] 会以多种方式破坏 ABI..." [4] 但是,Lua x.y.z 版本与 x.y.w 版本是 ABI 兼容的 [5].

关于 LuaJit,"LuaJIT 在链接器/动态加载器级别也完全与 Lua 5.1 兼容。这意味着你可以针对标准 Lua 头文件编译 C 模块,并从 Lua 或 LuaJIT 加载同一个共享库。" [1]

luaconf.h 中的一些编译时设置(例如 LUA_COMPAT)会影响 ABI 兼容性。

LuaList:2011-06/msg00979.html 讨论了 5.2 和 LuaJit 中的 ABI 兼容性/不透明结构。

相关主题包括二进制模块如何链接到 C 运行时库(例如 msvcrt.dllmsvcr100.dll)、Lua 库如何链接(例如静态地、动态地或通过 LuaProxyDll)以及 Lua 库的命名方式(例如 lua51.dll 或其他)。请参阅 BuildingModules。二进制模块如何找到其他二进制模块(例如,请参阅 LoadLibrary)也会影响使用 ABI 是否成功。

不一致的 FPU 状态 [2] 有时会导致 ABI 问题。

一些关于 Lua 中 ABI 标准化的努力是由 LuaBinaries [3]、LuaForWindows?LuaDist(部分由 CMake 约定预先确定)完成的。


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2011 年 10 月 15 日下午 11:03 GMT (差异)