判断 Lua 编译器是否运行在32位或64位系统上
2018-1-4 10:42:59
收藏:0
阅读:179
评论:5
我目前在我的默认开发系统上使用 Windows,在我的服务器上部署我的 Lua 脚本时使用 Linux。对于 Windows,只有几个32位解释器,如我目前使用的 Lua for Windows。在服务器上,解释器运行的脚本使用的是64位。
现在我的问题是:是否可能检查脚本是在哪种架构上运行(可能类似于版本的 _ENV 变量)?
如果有任何64位 Windows Lua 解释器,请在此事项上留言。谢谢您的帮助。
点赞
用户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
如果您能够获取运行脚本的可执行文件,您可能可以在 Windows 和 Linux 上查看其标头以检查它是 32 位还是 64 位应用程序。在这里,有建议如何在 Windows 上执行此操作。
我也对从 Lua 脚本(以及适用于 Lua 和 LuaJIT 解释器的脚本)中更简单的方法感兴趣,因为我遇到了一种情况,希望在加载不同的库时引用不同的路径,而无需用户指定这些路径。
2018-01-04 17:38:57
用户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
以下是一个函数,可以告诉你当前是否在 32 位或 64 位 LUA 上:
function bits() return 1<<32==0 and 32 or 1<<64==0 and 64 end
2021-01-03 16:19:05
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

为什么您需要那些知识?
通常在 Lua 的界面下,您无法进行任何基于底层主机结构的操作。要执行一些特定于主机的操作,您需要编写一些本机代码,但是您将知道您将要编译的体系结构。
然而,有一种可能的方法(也许还有更多)。您可以使用
string.dump()编译虚拟函数,并分析字节码头。字节码头在 Lua 版本之间不同,因此您应该首先检查版本,以知道“系统参数”字段的位置。如果 Lua 解释器没有被修改,则存储size_t字段大小(以字节为单位)的字段对于 32 位和 64 位主机而言将有所不同。