如何在 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
我有一个名为 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