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

Scripting 对于package.loadlib,lua是否要求dll为COFF格式或ELF格式?,scripting,lua,elf,coff,Scripting,Lua,Elf,Coff,我正在尝试将dll加载到我的lua脚本中并调用该函数。当我使用GCC(在cygwin下)和lua(5.2.4)创建dll时,我能够加载库并毫无问题地执行它。 但是,当我使用Lua5.1从SciTE创建并运行相同的脚本时,dll加载成功。但是,它不会执行。在dll中,我试图简单地将两个整数写入一个文件 t = package.loadlib("mylibrary.dll","myfunc") t(23,45) 这里有两个问题: 1.“mylibrary.dll”应该是什么格式,lua才能理解和执

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

t = package.loadlib("mylibrary.dll","myfunc")
t(23,45)
这里有两个问题: 1.“mylibrary.dll”应该是什么格式,lua才能理解和执行它而不会出现问题—ELF或COFF。
2.我可以在linux上运行的lua下运行dll(显然是在windows下构建的)吗?

您标题中的问题似乎与您描述的问题的原因非常不同

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

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


ELF或COFF,这是行不通的。

您可能需要使用Lua 5.1标头和库来编译DLL。即使我的DLL功能不做任何LUA操作,也需要考虑LUA版本吗?在DLL中,我只是将从Lua接收到的值写入一个文件。5.1和5.2之间没有ABI兼容性,不过如果您使用Lua API的一小部分,您可能会很幸运。Lua使用标准共享库函数(例如
dlopen
dlsym
)加载共享库,因此它支持它们支持的任何功能。我认为尝试在Linux进程上加载Windows DLL是行不通的。为了进一步实验,我使用VisualStuido构建了一个DLL。这是为了确保我使用的是本机编译器。想要明确的是,dll在windows平台上运行良好。dll是用LUA5.1头文件和库编译的。lua 5.1 loadlib()仍然会导致错误“找不到指定的过程”。有什么想法吗???我正在遵循中提到的指导方针