应用二进制接口 |
|
"通常,新的 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.dll
或 msvcr100.dll
)、Lua 库如何链接(例如静态地、动态地或通过 LuaProxyDll)以及 Lua 库的命名方式(例如 lua51.dll
或其他)。请参阅 BuildingModules。二进制模块如何找到其他二进制模块(例如,请参阅 LoadLibrary)也会影响使用 ABI 是否成功。
不一致的 FPU 状态 [2] 有时会导致 ABI 问题。
一些关于 Lua 中 ABI 标准化的努力是由 LuaBinaries [3]、LuaForWindows? 和 LuaDist(部分由 CMake 约定预先确定)完成的。