如何在 linux 上执行 luac 生成的 lua 字节码

How to execute lua bytecode genrated by luac on linux

我有一个名为 hello.lua

的简单 lua 源代码
print('Hello Lua')

我在 RedHat Linux 机器上将此文件编译为字节码,使用 Lua5.3.4 如下:

luac -o hello.luac  hello.lua
chmod +x hello.luac
./hello.luac 
bash: ./hello.luac: cannot execute binary file

我想架构应该没问题。我不知道哪里出了问题。

预编译的 Lua 程序 运行 与源代码完全相同:

lua hello.luac

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

To allow the use of Lua as a script interpreter in Unix systems, the standalone interpreter skips the first line of a chunk if it starts with #. Therefore, Lua scripts can be made into executable programs by using chmod +x and the #! form.

添加 shebang 作为脚本的第一行:

#!/usr/bin/env lua
print('Hello Lua')

shebang 被 luac 删除,即使 lua 源文件有它。在某些情况下,当需要 运行 不带任何参数的已编译二进制文件时,例如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