1. 程式人生 > >cocos2dx lua轉luac的問題(32位與64位不相容問題)

cocos2dx lua轉luac的問題(32位與64位不相容問題)

兩種思路:

1、LuaJit 轉luac,生成的bytecode,是按照32位生成的。在64位的機器上是不支援的。(新版本的LuaJit 已經支援了64位。可更新新版本的LuaJit, 用新版本LuaJit生成對應的luajit-mac)

2、原生的Lua5.1.4 生成的bytecode,在64位機器上,是按照64位生成的,在32位的機器上是不支援的。(可以更改Lua和生成Luac的程式碼,即可同時支援32位與64的問題)

根據分析程式碼發現,主要是由於size_t這個型別(size_t 在32位架構上是4位元組,在64位架構上是8位元組)導致生成的bytecode在32位與64位不相容的問題。故可以將生成bytecode 與載入bytecode 的地方,均換成固定大小的int即可解決問題。

具體修改如下:

ldump.c 生成bytecode。static void DumpString(const TString* s, DumpState* D) 中 size_t 換成 int。

lundump.c 載入解析bytecode。 static TString* LoadString(LoadState* S) 中 size_t 換成 init。

luac 檔案頭部資料  void luaU_header (char* h) 中 size_t 換成 int。

unity的ulua 使用的是LuaJit。可通過更新LuaJit 解決64位的問題。

Android 機器只有帶arm64為64位機器。其他的都是32位機器。

LuaJit位元組碼有以下特點:

  • 使用lua編譯出來的位元組碼和luajit的位元組碼不相容
  • 32位和64位的生成的位元組碼不相容
  • 不同版本的luajit的位元組碼可能不相容

相關推薦

cocos2dx lualuac的問題3264相容問題

兩種思路: 1、LuaJit 轉luac,生成的bytecode,是按照32位生成的。在64位的機器上是不支援的。(新版本的LuaJit 已經支援了64位。可更新新版本的LuaJit, 用新版本LuaJit生成對應的luajit-mac) 2、原生的Lua5.1.4 生成

3264作業系統以及CPU的關係

32位和64位的區別:  從硬體看,  1、目前32位和64位是指CPU的通用暫存器位寬(資料匯流排的位寬),所以64位的CPU資料處理位寬是32位CPU的2倍;  2、可定址範圍擴充套件,32位系統支援最大記憶體位4G(地址匯流排位寬已經是32位),64位系

nasm 彙編輸出 helloworld-windows 3264測試通過

使用nasm彙編,然後用visual studio的link連線成exe 選安裝nasm與visual studio // hello.asm STD_OUTPUT_HANDLE equ -11 NULL equ 0 global GobleyGo

3264 CPU、編譯器、作業系統、應用程式、arm和X86關係

一:arm和X86的區別 arm:對應精簡指令集 X86:對應複雜指令集 arm上的和X86上編譯過的的東西是不能相互使用的,因為指令集不一樣嘛。指令集可以通俗的理解為,溝通語言。arm和X86之間東西不能直接用,類似於一個美國人和一箇中國人各自只說自己的語言,那麼這兩個人是沒法溝通的。

32 64 區別 : CPU 作業系統 應用程式

https://www.cnblogs.com/mlgjb/p/8385658.html   原文連結 1.64位CPU與32位CPU 這兩者的指令集合、運算元位數、暫存器名稱和個數等等都不相同。 一、比如一條mov eax,1指令,可能在32bCPU上

3264程式設計注意事項總結

----------------------------------------------------------------------------------

關於VS中區分debugrelease,3264編譯的巨集定義

在vs程式設計中,常常涉及到32位和64位程式的編譯,怎麼判斷當前編譯是32位編譯還是64位編譯?如何判斷 是debug下編譯還是release下編譯?因為之前用到,這裡記錄一下,省的忘了又要瘋狂的google。 1.判斷是debug編譯還是release編譯。 如

linux驅動編寫3264設備註意事項

  Linux 64 位體系結構     不幸的是,C 程式語言並沒有提供一種機制來新增新的基本資料型別。因此,提供 64 位的定址和整數運算能力必須要修改現有資料型別的繫結或對映,或者向 C 語言中新增新的資料型別。     表 1. 32 位和 64 位資料模型 ILP32 LP64 LLP64

關於程式碼中區分debugrelease、3264、xp還是win7編譯的巨集定義

在寫程式碼的過程中,我們經常需要考慮這樣的一些問題:有一部分程式碼片段只有在32位編譯環境下編譯才能通過,在64位編譯環境下是無法編譯通過的,那麼怎樣才能判斷當前編譯環境是32位編譯還是64位編譯?還有,如何判斷當前編譯是debug編譯還是release編譯?再者,有些AP

iOS開發3264的坑

  眾所周知,蘋果是從iPhone 5s開始對全線移動產品使用64位架構,那麼如果App需要相容32位和64位的機型,就需要注意它們之間的區別。   下面我們首先看看基本資料型別的區別: 32位編譯器 char :1個位元組 char*(即指標變數): 4個位元組(32位

linux 3264系統下資料型別長度的區別

近日在centos下用c寫東西,這個程式的服務端執行在64位的centos下,客戶端有可能是32機,也有可能是64位的。 為了保證資料傳輸的一致性制定了一套協議,用struct實現。為了保證輸出過程中,資料的完整性,特別針對系統的不同對struct裡變數的型別進行了優化。為了

實現登入頁面登入成功後跳過程個人理解學習,程式碼完整

function login()    {        var userName = document.getElementById("loginName").value;//通過ID獲取元素        var pwd = document.getElementById

3264的區別

一.簡介 32位CPU:計算機中的位數指的是CPU一次能處理的最大位數。32位計算機的CPU一次最多能處理32位資料,例如它的EAX暫存器就是32位的,當然32位計算機通常也可以處理16位和8位資料。在Intel由16位的286升級到386的時候,為了和16位系統相容,它先

如何檢視oracle客戶端版本號是32還是64

unix下的話,找到sqlplus, file /path/to/sqlplus,windows就更簡單了,32位系統肯定是32位的,64位系統看工作管理員就好了,sqlplus後面沒有*32就是64位了,如下圖: 轉自:http://hi.baidu.com/goodli

GCC 64程式的makefile條件編譯心得——3264版、debug版release版相容MinGW、TDM-GCC

  為了適應現在越來越流行的64位系統,經常需要將程式碼分別編譯為32位版和64位版。其次,除了需要生成debug版用於開發測試外,還需要生成release版用於釋出。本文介紹瞭如何利用makefile條件編譯來生成這些版本,而且不僅相容Linux下的GCC,還支援MinGW、TDM-GCC等Windows

32程序下調用64函數——進程32模式64模式切換

always imu tab 之間 pointer icm bool list ack 之前學習的32位進程中調用64位進程函數的知識整理一下,也就是32位模式與64位模式之間的切換。 相關博客:http://www.cnblogs.com/lanrenxinxin/p/4

3264機數據大小

spa 數據大小 存儲 器) api 編譯器 itl 根據 程序員 32位機與64位機數據大小32位編譯器: char :1個字節 char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)

】文件下載之斷點續傳客戶端服務端的實現

http協議 當前時間 end box [] ada demo 服務端 sem 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 【轉】文件下載之斷點續傳(客戶端與服務端的實現) 前面講了文件的上傳,今天來聊聊文件的下載。 老規矩,還是從最簡單粗暴的開始。那麽多簡單算簡單

蘋果產品時間發布表統計iPhone、iPad,以及3264機的說明

bsp 產品 13.10 上市 pos min ipad mini 時間排序 手機 之前因為某些原因,需要對apple家族的手機和pad產品做一個上市時間排序,以及分析分別是哪種CPU機型 總結如下: iPad家族: 1、iPad     - 2010.1.27發布 2、

32系統64系統對內存的支持

windows系統 筆者最早用的筆記本是HP CQ45-M02TU,內存僅2G(DDR3_1333MHZ),安裝的WIN7_32位操作系統。最近它運行緩慢,通過升級內存提升性能。網購了一條2G同頻內存,安裝後啟動系統,按鍵WIN+PauseBreak,內存顯示為4G,可用內存僅為2.66G,另外1