[英]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.