繁体   English   中英

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

[英]Determine whether Lua compiler runs 32 or 64 bit

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

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

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

这是如何确定您的操作系统位数,而不是您的编译器位数(您可以在 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

如果您可以获得运行该脚本可执行文件,您可能可以在 Windows 和 Linux 上查看其标头以检查它是 32 位还是 64 位应用程序; 以下是有关如何在 Windows 上执行此操作的建议

我也对从 Lua 脚本(以及与 Lua 和 LuaJIT 解释器一起使用的脚本)执行此操作的更简单方法感兴趣,因为我遇到了一种情况,我想根据 32 位或 64 位库引用不同的路径需要在用户不必指定这些路径的情况下加载。

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

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

print(_86or64());

你为什么需要这些知识?

通常,在 Lua 端,您无法做任何取决于底层主机架构的事情。 要执行特定于主机的某些操作,您需要编写一些本机代码,然后您就会知道要编译的体系结构。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM