编译你的lua文件

时间:2012-09-17 16:12:06

标签: lua

如何在Windows上构建和编译自己的Lua文件?并使它们可执行。

我正在阅读开始Lua编程,我安装了Windows 7和MacOS Lion。我很难按照说明操作。他们不适合我。

在MacOS上,我打开终端并将其放入:

  1. export LUA_DIR=/usr/local/lib/lua/5.1
  2. mkdir -p /usr/local/lib/lua/5.1(它告诉我,mkdir: illegal option)我无法从这里开始
  3. SET LUA_DIR=”c:\program files\lua\5.1”
  4. 至于Windows,我按照这本书来做。 这就是我在shell c:\Users\bd>

    中看到的内容
    1. mkdir "c:\program files\utility"它告诉我访问被拒绝
    2. 我试图右键单击此文件夹并勾选read only,但它不起作用。 任何线索都会受到赞赏,这部分对我来说真的很困惑。

5 个答案:

答案 0 :(得分:3)

要将Lua文件打包成Windows上的可执行文件,您有几个选项。有srlua,来自wxLua的wxLuaFreeze(以binary for Windows提供),此SO answer中有更多选项。

基本上,主要的两个选项是:(1)将您的Lua代码附加到预编译的exe文件,以便在运行该exe文件时加载和执行,以及(2)将您的Lua代码转换为实际可执行文件通过将其编译为字节码,然后编译为C,然后编译到目标平台。

关于您的MacOS问题,mkdir -p表示要求mkdir创建中间目录(例如,您要求创建/a/b/c,如果那些人不在,那么它还会创建/a/b# 39; t存在)。由于您没有说出您运行的MacOS版本,因此很难提供更详细的答案。

答案 1 :(得分:1)

对于OSX终端问题:

此命令应该起作用

export LUA_DIR=/usr/local/lib/lua/5.1

此命令可能会给您许可问题:

mkdir -p /usr/local/lib/lua/5.1

您可以尝试这样来解决这个问题。系统将提示您输入密码:

sudo mkdir -p /usr/local/lib/lua/5.1

此命令与OSX无关,无法使用。这是一个Windows命令:

SET LUA_DIR=”c:\program files\lua\5.1”

答案 2 :(得分:1)

目前,Lua的标准发行版不会将脚本编译为本机可执行代码;它首先将脚本编译为字节码,然后通过合理快速的静态解释来解释字节码(这也意味着它可以轻松地在本机或虚拟系统中移植,并且非常能抵抗攻击(可能是针对本机编译器本身)。

Lua仍然没有像Java和.Net这样的运行时JIT编译器:Lua仍然没有用于生成安全沙箱的VM。

存在将您的字节码(或直接源脚本)转换为C源的Lua包,可以通过用于编译Lua引擎本身的相同C编译器将Lua库转换为本机模式(这是如何虽然在一些时间关键部分手动略微优化了内置库,但仍会生成内置库。

然而,可以将Lua编译为javascript源,并使用Javascript以快速性能运行它,因为今天的Javascript解释确实具有良好的性能,其实现的VM具有针对其自己的字节码的JIT编译器。

也可以将Lua字节码转换为.Net或Java源,然后可以直接从Lua执行(因为你需要一个已移植到.Net或Java或Javascript的Lua版本,这并不比在C / C ++中直接开发带有JIT编译器的VM复杂(中等复杂的部分是字节码验证器,但真正复杂的部分是内存管理器的垃圾收集器及其沙箱,以便您的Lua脚本将是与Lua引擎本身完全隔离,因为它有自己的内存,但是最复杂的部分,如果运行时优化器和分析统计信息的集合:这已经在Java,.Net,Javascript,PHP / Zend,Python,Perl的现代VM中完成了...)。

我不知道哪个其他语言VM可以提供最佳性能来移植Lua并在其上实现编译器到他们自己的字节码,这些字节码在其VM中以接近本机的速度运行。但是我自己对程序(用更简单的语言)自我生成字节码的小经验,他们可以自己运行,总是让我看到Java在性能上超过.Net和Javascript。这很可能是因为Java具有基于分析的动态代码优化器

(相反,.Net优化器在程序安装期间只运行一次,使用在安装.Net VM本身期间收集的一些分析数据,或者在脚本的第一次实例化时,不知道在执行期间收集的任何分析数据已编译的程序本身,并基于对平台功能的一些有些假设。)

(我不会在PHP,Python或Perl中更快;但是从未尝试过与新Javascript引擎的比较)。将Lua程序移植到Javascript是相对容易的,因为它实现了相对容易解决链接的闭包。

稍后我们可能会看到真正的VM实现Lua和JIT以及自生成代码以及实现新沙盒VM以运行其自生成代码的可能性。生成EXE文件以进行分发需要更多时间;特别是因为它通常还需要添加安装程序和分发管理器。

所以现在我们可以想象将Lua应用程序分发到另一个支持JIT的VM的字节码:这个生成的字节码会比Lua字节码快,因此对Lua的语义进行逆向工程会非常复杂,因为它需要两个单独的逆向工程,首先从另一个VM的字节码到Lua的字节码,两个字节码都丢失了一些易于推理的规则和测试选项和foll,然后再次使用Lua源

答案 3 :(得分:0)

Windows存在权限问题 - 请尝试在管理员模式下创建cmd或PowerShell。 C:\Program Files是受保护的目录,常规用户帐户无权写入。

关于OS X问题,请查看mkdir OS X manual page以确保您的命令正确无误。

答案 4 :(得分:0)

所以,如果我正确理解你的问题,你就是想在Windows上构建Lua。

这当然是可能的,但对初学者来说并不容易。我强烈建议您使用二进制发行版,这样更容易安装,除非您有特殊要求。

以下是几个Windows发行版: