我目前在我的默认开发系统上使用Windows
,在我部署Lua脚本的服务器上使用Linux
。对于Windows
,我只有几个32位解释器,如Lua for Windows我目前使用的解析器(至少据我所知)。在服务器上,解释器以64位运行脚本。
现在我的问题是:是否可以检查脚本运行的架构(可能类似于版本的_ENV
变量)?
如果有任何64位Windows Lua解释器随时可以对此事发表评论。提前谢谢。
答案 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