簡體   English   中英

確定 Lua 編譯器運行的是 32 位還是 64 位

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM