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

时间:2017-07-28 18:51:58

标签: linux lua bytecode

我有一个名为hello.lua的简单lua源代码

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

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

https://www.exampledomain/category/presents/
https://www.exampledomain/category/books/
https://www.exampledomain/category/clothes/
https://www.exampledomain/category/bags/

我认为架构应该没问题。我不知道出了什么问题。

3 个答案:

答案 0 :(得分:3)

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

lua hello.luac

答案 1 :(得分:0)

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

  

为了允许在Unix系统中使用Lua作为脚本解释器,如果以#开头,则独立解释器会跳过块的第一行。因此,可以使用chmod +x#!表单将Lua脚本转换为可执行程序。

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

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

答案 2 :(得分:0)

即使lua源文件包含shebang,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