如何在Linux上执行由Luac生成的Lua字节码

我有一个简单的Lua源代码文件叫做hello.lua

print('Hello Lua')

我在RedHat Linux机器上使用Lua5.3.4编译了此文件到字节码中,如下所示:

luac -o hello.luac  hello.lua
chmod +x hello.luac
./hello.luac
bash: ./hello.luac: 无法执行二进制文件

我想架构应该没问题。我搞不明白出了什么问题。

点赞
用户107090
用户107090

预编译的 Lua 程序和源码一样被运行:

lua hello.luac
2017-07-28 19:00:31
用户415823
用户415823

正如 @lhf 在他的回答中所述,Lua字节码是使用Lua解释器执行的,正如 手册 所建议的那样:

为了在UNIX系统中允许将Lua作为脚本解释器使用,独立解释器会跳过以 # 开头的块的第一行。因此,可以使用 chmod +x#! 形式将Lua脚本变成可执行程序。

在脚本的第一行添加一个 shebang

#!/usr/bin/env lua
print('Hello Lua')
2017-07-28 19:14:26
用户11330890
用户11330890

即使 lua 源文件包含 shebang,luac 也会将其删除。在某些情况下,例如需要在没有任何参数的情况下运行编译后的二进制文件(例如 CGI),您可以在 luac 文件的顶部手动添加 shebang:

luac -o hello.luac hello.lua
echo '#!/usr/bin/env lua' > shebang
cat shebang hello.luac > hello.luac2
mv hello.luac2 hello.luac
chmod +x hello.luac
./hello.luac
2020-07-08 01:43:24