Windows Lua转换成可执行文件找不到lua5.1.dll

我有一个用Lua 5.1编写的程序。我在Windows 7上尝试使用srlua将lua文件转换为可执行文件。最终我创建了一个可执行文件

glue.exe srlua.exe myscript.lua gd.exe

当我点击exe / bat执行时,它崩溃了。提示:在计算机中找不到lua51.dll。当我使用cmd执行时,它正常工作,即使我只将gd.exe移动到其他目录。为什么?srlua是否创建独立的exe而不需要lua环境? dir ls

错误提示

点赞
用户6381964
用户6381964

在 Windows 下,可执行文件只会在以下几个位置查找 .dll 文件(按顺序):

  1. 首先搜索依赖路径。在创建项目时,您可以设置这些路径(通常通过 IDE 实现)。

  2. 运行可执行文件的当前目录。例如,如果 gd.exeC: 磁盘上的文件夹 myexe 中,将会检查目录 C:\myexe

  3. 系统目录。对于 Windows,它是类似于 C:\Windows\System32

  4. PATH 环境变量指定的额外路径。

因此,如果将可执行文件 gd.exeC:\myexe 移动到 C:\myexe2,则需要通过依赖项 / PATH 环境变量指向 .dll,或将所有需要的 .dll 文件移动到新目录中。

如果命令行用于运行程序,但不适用于 .exe 本身,则您的命令行已设置 PATH 环境变量。您可以在命令行中使用 setx path "%path%;c:\newpath" 进行设置,或使用控制面板 -> 系统和安全 -> 系统,然后单击高级系统设置 -> 环境变量, 在系统变量下查找 PATH 关键字。

将 .dll 文件和可执行文件放在同一目录中(例如 c:\myexe),并运行可执行文件是一种好的方法,可以确保它们一起工作,并且所有所需的 .dll 文件都被可执行文件看到。

来源(尽管没有提到 PATH 环境变量):https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

2016-06-01 14:48:03
用户1442917
用户1442917

你正混淆着 Lua 环境:你的目录结构显示 Lua51.dll,但是你的错误信息却引用了 Lua5.1.dll,而这个文件你没有(而且这两个文件是不同的)。不知何故,你依赖于一个编译使用 Lua5.1.dll 的模块。你可以使用 依赖项查看器 找出你的依赖链,因为它会显示正在加载哪些 DLL 以及它们来自哪个位置。你也可以在 "profile" 模式下运行它,从而知道你看到的错误发生在依赖链中的哪个位置,以便知道哪个 DLL 或可执行文件有问题。

2016-06-01 14:52:51