判断 Lua 编译器是否运行在32位或64位系统上

我目前在我的默认开发系统上使用 Windows,在我的服务器上部署我的 Lua 脚本时使用 Linux。对于 Windows,只有几个32位解释器,如我目前使用的 Lua for Windows。在服务器上,解释器运行的脚本使用的是64位。

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

如果有任何64位 Windows Lua 解释器,请在此事项上留言。谢谢您的帮助。

点赞
用户5675002
用户5675002

为什么您需要那些知识?

通常在 Lua 的界面下,您无法进行任何基于底层主机结构的操作。要执行一些特定于主机的操作,您需要编写一些本机代码,但是您将知道您将要编译的体系结构。

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

2018-01-04 11:10:28
用户1847592
用户1847592

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

local arch
if (os.getenv"os" or ""):match"^Windows" then
   print"您的系统是 Windows"
   arch = os.getenv"PROCESSOR_ARCHITECTURE"
else
   print"您的系统是 Linux"
   arch = io.popen"uname -m":read"*a"
end
if (arch or ""):match"64" then
   print"您的系统是 64 位"
else
   print"您的系统是 32 位"
end
2018-01-04 11:46:04
用户1442917
用户1442917

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

我也对从 Lua 脚本(以及适用于 Lua 和 LuaJIT 解释器的脚本)中更简单的方法感兴趣,因为我遇到了一种情况,希望在加载不同的库时引用不同的路径,而无需用户指定这些路径。

2018-01-04 17:38:57
用户9909270
用户9909270

将下面翻译成中文并且保留原本的 markdown 格式

The simplest way is to test number limit. 
In 32 bit Lua 0xffffffff(8'f's) would be the max int number and 0xfffffffff(9'f's) would overflow
try flowing code

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

print(_86or64());

翻译

最简单的方法是测试数字极限。在 32 位 Lua 中,0xffffffff(8 个'f')是最大的整数,且0xfffffffff(9 个'f')会溢出。请尝试以下代码:

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

print(_86or64());
2020-04-20 15:50:53
用户5386481
用户5386481

以下是一个函数,可以告诉你当前是否在 32 位或 64 位 LUA 上:

function bits() return 1<<32==0 and 32 or 1<<64==0 and 64 end
2021-01-03 16:19:05