确定Lua编译器是运行32位还是64位

时间:2018-01-04 10:37:39

标签: lua 32bit-64bit

我目前在我的默认开发系统上使用Windows,在我部署Lua脚本的服务器上使用Linux。对于Windows,我只有几个32位解释器,如Lua for Windows我目前使用的解析器(至少据我所知)。在服务器上,解释器以64位运行脚本。

现在我的问题是:是否可以检查脚本运行的架构(可能类似于版本的_ENV变量)?

  

如果有任何64位Windows Lua解释器随时可以对此事发表评论。提前谢谢。

5 个答案:

答案 0 :(得分:2)

这是如何确定操作系统的位数,而不是编译器的位数(可以在Windows 64位上运行32位Lua.exe)。

local arch
if (os.getenv"os" or ""):match"^Windows" then
   print"Your system is Windows"
   arch = os.getenv"PROCESSOR_ARCHITECTURE"
else
   print"Your system is Linux"
   arch = io.popen"uname -m":read"*a"
end
if (arch or ""):match"64" then
   print"Your system is 64-bit"
else
   print"Your system is 32-bit"
end

答案 1 :(得分:2)

如果你能得到executable that runs the script,你可以在Windows和Linux上查看它的标题,检查它是32位还是64位应用程序;这里是suggestions on how to do it on Windows

我也对从Lua脚本(以及与Lua和LuaJIT解释器一起工作的脚本)更简单的方法感兴趣,因为我遇到了一个案例,当我想根据32bit是否引用不同的路径或者需要加载64位库而无需用户指定这些路径。

答案 2 :(得分:0)

为什么你需要这些知识?

通常,在Lua方面你无能为力,这取决于底层主机架构。要执行特定于主机的某些操作,您需要编写一些本机代码,但随后您将了解要编译的体系结构。

虽然有一种可能的方法(也许还有更多)。您可以使用string.dump()编译虚函数并分析字节码头。 Lua版本之间的标题不同,因此您应首先检查版本以了解“系统参数”字段的位置。如果Lua解释器没有被更改,那么存储size_t大小(以字节为单位)的字段对于32位和64位主机将是不同的。

答案 3 :(得分:0)

最简单的方法是测试数量限制。在32位Lua中,最大整数数为0xffffffff(8'f's),而0xfffffffff(9'f's)将溢出 尝试流代码

function _86or64()
    if(0xfffffffff==0xffffffff) then return 32 else return 64 end
end

print(_86or64());

答案 4 :(得分:0)

这里有一个函数可以告诉您您使用的是 32 位还是 64 位 LUA:

function bits() return 1<<32==0 and 32 or 1<<64==0 and 64 end