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的字节码可能不兼容
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值