【发布时间】:2016-03-17 05:44:42
【问题描述】:
我正在尝试将 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. 'mylibrary.dll' 应该是什么格式,以便 lua 能够毫无问题地理解和执行 - ELF 或 COFF。 2.我可以在linux上运行的lua下运行dll(显然是windows下构建的)吗?
【问题讨论】:
-
您可能必须使用 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 是使用 lua 5.1 头文件和库编译的。 lua 5.1 loadlib() 仍然导致错误“找不到指定的过程”。有什么想法吗???我正在遵循lua.org/pil/26.2.html 中提到的准则