对于package.loadlib,Lua需要dll是COFF格式还是ELF格式?

我正在尝试将一个 dll 文件加载到我的 lua 脚本中并调用它的函数。当我使用 GCC(在 cygwin 下)和 lua(5.2.4)创建 dll 时,我能够成功加载并执行库,没有任何问题。 然而,当我使用 Lua 5.1 从 SciTE 运行相同的脚本时,dll 成功加载,但不执行。在 dll 中,我尝试将两个整数写入一个文件。

t = package.loadlib("mylibrary.dll","myfunc")
t(23,45)

这里有两个问题:

  1. 对于 Lua 而言,‘mylibrary.dll’ 应该是什么格式以便能理解并无问题地执行—— ELF 还是 COFF。
  2. 我能在运行在 Linux 上的 Lua 下运行(显然是在 Windows 下构建的)dll 吗?
点赞
用户734069
用户734069

你的标题提出的问题似乎与你所描述的问题的原因非常不同。

一方面,Lua 加载的动态库格式是 Lua 代码运行所在平台的格式。 就像你不能拿一个编译好的 Win32 可执行文件期望在 Linux 上运行一样,你也不能拿一个编译好的 Win32 动态链接库期望在 Linux 上加载它。显然,仿真工具(如 Wine)存在,但它们是通过模拟 Windows 来工作的。你可以在仿真器内运行它们,但不能在其外部运行。

但另一方面,这并不是你的问题的根源。你的问题是你正在使用一个针对一个版本 Lua 构建的动态库与针对另一个版本 Lua 构建的应用程序一起使用。这是不起作用的;Lua 不会在“次要”版本之间保持兼容性,只会在版本之间保持兼容性(如 Lua 5.1.3 vs. 5.1.4)。

ELF 或 COFF,这是行不通的。

2015-12-12 01:13:13