对于package.loadlib,lua是否要求dll为COFF格式或ELF格式?

时间:2015-12-11 10:32:23

标签: scripting lua elf coff

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

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

这里有两个问题: 1.“mylibrary.dll”的格式应该是什么?' mylibrary.dll'是的,让lua理解并执行没有问题 - ELF或COFF。 2.我可以在运行Linux的lua下运行dll(显然是在windows下构建的)吗?

1 个答案:

答案 0 :(得分:0)

标题中的问题似乎与您描述的问题的原因有很大不同。

一方面,Lua加载的动态库的格式是运行Lua代码的平台的格式。正如您无法获取已编译的Win32可执行文件并期望它在Linux上运行一样,您无法获取已编译的Win32 dll并期望它在Linux上加载它。显然,像Wine这样的仿真工具存在,但这些工具通过模拟Windows来工作。您可以在模拟器中运行它们,但不能在它之外运行它们。

但另一方面,是您问题的根源。您的问题是您正在使用为一个版本的Lua构建的动态库,其中包含为另一个版本的Lua构建的应用程序。这不起作用; Lua不保留“次要”版本之间的兼容性,仅在修订版本之间(Lua 5.1.3与5.1.4)。

ELF或COFF,无法正常工作。