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