我正在研究一个非常非常简单的Lua程序,试图自学语言。这是三线计划:
file = io.open("hello.txt", "w")
file:write("Hello, World.\n")
io.close(file)
当我使用Lua作为脚本的程序时,它工作正常。当我编译程序时,它的工作原理。但是,当我运行已编译的程序时,我得到了这个:
alt text http://profnano.org/andy/misc/img/lua_crash.jpg
我在Pentium 4上的Windows XP上使用Lua 5.1.2。我卸载了Lua并重新安装它,没有任何效果。我正在编译脚本如下:
luac -o hello.exe hello.lua
我做错了什么,或者这是一个已知的错误?我希望能够编写Lua程序,以便在没有安装Lua的计算机上运行。救命! (谢谢!)
答案 0 :(得分:4)
luac不会编译到系统exe文件。它所做的只是采用lua脚本,并将其转换为lua字节码。您仍然必须将生成的文件传递给lua才能执行。
因此,从OS的角度来看,exe文件包含垃圾。当exe文件不包含有效的exe头时,操作系统由于某种原因决定它必须是旧式的dos .com文件,并尝试使用16位dos子系统执行它。因此奇怪的错误信息。
如果你想用编译的lua创建一个exe,你需要使用一个不同的环境 - 也许是visual studio - 来创建一个小项目,使用嵌入式lualib加载(并执行)lua文件 - 编译或脚本
Stackoverflow上的Creating Standalone Lua Executables提供了一些关于如何实现这一目标的提示。