如何在Windows上构建和编译自己的Lua文件?并使它们可执行。
我正在阅读开始Lua编程,我安装了Windows 7和MacOS Lion。我很难按照说明操作。他们不适合我。
在MacOS上,我打开终端并将其放入:
export LUA_DIR=/usr/local/lib/lua/5.1
mkdir -p /usr/local/lib/lua/5.1
(它告诉我,mkdir: illegal option
)我无法从这里开始SET LUA_DIR=”c:\program files\lua\5.1”
至于Windows,我按照这本书来做。
这就是我在shell c:\Users\bd>
mkdir "c:\program files\utility"
它告诉我访问被拒绝我试图右键单击此文件夹并勾选read only
,但它不起作用。
任何线索都会受到赞赏,这部分对我来说真的很困惑。
答案 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发行版: