【转】Luajit-2.1.0-beta1的发布和生成arm64用bytecode的解脱
来自:Luajit-2.1.0-beta1的发布和生成arm64用bytecode的解脱
前情提要:由于苹果要求2015年2月1日上架的新app必须支持64位的arm64,旧的app也得在6月1日支持64位,来源。于是unity3d弄出了il2cpp这种花式的玩法来进行64位支持,而对于当时的大多数采用luajit的cocos2d-x用户而言,就只能选择换成lua本身(32位和64位的字节码还是不同)或者不编译成二进制的字节码,只是混淆一下源代码来保持64位兼容,但是这样对于代码的保护就不到位了(虽然大家都很忙,也不会有人太闲着来看这些代码)不过能够用上luajit的字节码还是会让人踏实很多。
很快在luajit的maillist出现了相关arm64的询问,作者也给出了详细的方案,详情可见这里;接着这位叫哎呀的热心人就在他的博客上给出了可以生成arm64下的字节码的方案,第一篇,第二篇。是对maillist的总结和实践最后给出的方案,至此luajit的2.1.0alpha版可以生成arm64的字节码了,cocos2dx的app更新的时候只需根据__arm64__的预编译宏定义修改一下lualoader,带上32位和64位的字节码就可以欢快的跑在arm64cpu的iphone5s及以上手机了。
至此为止,看上去一切已经圆满了,只是app的体积会增大出一份64位字节码的代码大小,但是可以换来更加放心的代码保护和加快加载的速度也是值得的,不过正如luajit的作者在maillist里面的回答以及哎呀在第二篇博客上给出的方案所留下的尾巴,想要生成64位的字节码并不是一件容易的事情,必须在字节码的目标平台上生成,也就是要在iphone5s以上的手机上才能生成,生成完了还要通过ftp的形式发回到做包的机器上,简直是自动化流程的究极噩梦,一旦更新了代码就得在手机上去生成一下然后传回到pc或者mac上,想着就觉得头疼。虽然后来爱折腾的同学实现了iphone6p一键编译完成后自动上传到更新pc上的功能,却时常在更新时忘了去点那么一下……
于是最后luajit作者在maillist上那句话就成了我一直念念不忘的[Eventually there'll be a native x64 interpreter with LJ_GC64 and LJ_FR2, then you could use that one.]
……回响……
昨天发现luajit在8月25号更新,赶紧下下来看了看更新日志(官网的更新日志并没有更新到最新版本),发现了两条
- Add LJ_GC64 mode: 64 bit GC object references (really: 47 bit). Interpreter-only for now.
- Add LJ_FR2 mode: Two-slot frame info. Required by LJ_GC64 mode.
顿时觉得有戏了,虽然作者并没有给出生成的方案,但查看了一下代码,最后在lj_arch.h里面发现了LUAJIT_ENABLE_GC64的宏定义,正是开启LJ_GC64的关键,开启宏定义之后在linux下编译生成的luajit执行文件就可以生成出和在arm64的iphone下一模一样的字节码了,从此解放了iphone,感谢luajit的作者Mike Pall ,本来我还一直担心luajit不再继续维护的。
ps: 作者在此提到了这个宏定义
patch:
最近我又发现在windows下面没法正确的通过msvcbuild编译出luajit的x64可执行文件,如果定义了LUAJIT_ENABLE_GC64这个宏,编译会出错:buildvm_arch.h(1281): error C2039: 'J': is not a member of 'GG_State'.
这样的话就只能在linux的gcc64下面编译,十分不甘心。继续深挖之后发现还是有办法的,
首先当然要在vs2015 x64 native command prompt下面运行luajit/src/msvcbuild.bat,在lj_arch.h的开始#define LUAJIT_ENABLE_GC64。然后修改msvcbuild.bat文件,去掉第一个-D JIT,也就是关闭jit,变成这样:@set DASMFLAGS=-D WIN -D FFI -D P64;
然后将vm_x86.dasc修改为vm_x64.dasc,否则虽然可以编译出来可执行文件,但是运行就出错退出。经过这两处修改之后就可以在windows下的vs里编译出可以生成兼容arm64的bytecode的luajit可执行文件了。
【转】Luajit-2.1.0-beta1的发布和生成arm64用bytecode的解脱的更多相关文章
- Luajit-2.1.0-beta1的发布和生成arm64用bytecode的解脱
前情提要:由于苹果要求2015年2月1日上架的新app必须支持64位的arm64,旧的app也得在6月1日支持64位,来源.于是unity3d弄出了il2cpp这种花式的玩法来进行64位支持,而对于当 ...
- JuiceFS v1.0.0 Beta1 发布,加强数据安全能力
在 JuiceFS 开源一周年之际,我们迎来了首个里程碑版本 JuiceFS v1.0.0 Beta1,并将开源许可从 AGPL v3 修改为 Apache License 2.0. JuiceFS ...
- Redis 3.0正式版发布,正式支持Redis集群
Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ...
- RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)
最新版本请转到:RDIFramework.NET平台代码生成器V3.1版本全新发布-更新于2016-10-08(提供下载) RDIFramework.NET代码生成器V3.0版本修改了针对3.0版本的 ...
- Bootstrap v4.0.0-alpha.5 发布,大量更新
Bootstrap v4.0.0-alpha.5 发布了,Bootstrap是快速开发Web应用程序的前端工具包.它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的 ...
- Ionic 2.0.0-rc.1 发布,HTML5 移动应用框架
Ionic 2.0.0-rc.1 发布了,Ionic Framework 是个高级的 HTML5 移动端应用框架,是个很漂亮的使用 HTML5 开发混合移动应用前端框架.本次更新内容如下: Bug 修 ...
- MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题
///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...
- log-malloc2 0.2.4 发布
log-malloc2 0.2.4 发布了,该版本修复了日志格式输出的 bug. og-malloc2 是一个 malloc 日志预加载库,用于检测内存泄漏问题.
- TypeScript 0.9.1 发布,新增 typeof 关键字
TypeScript 0.9.1 发布了,该版本提升了编译器和语言的性能,增加新的语言特性 typeof ,更好的 this 处理等.详细介绍请看发行说明. TypeScript 是微软新推出的一种语 ...
随机推荐
- enjoy dollar vs cash dollar
當 enJoy 卡 客 戶 憑 enJoy 卡 於 enJoy 卡 「 特 約 商 戶 」 簽 賬 消 費 , 累 積 之 enJoy Dollars 及 Cash Dollars 可 在 同 一 交 ...
- c 结构体的队列
头文件 lsg_queue.h #pragma once #include<stdbool.h> /* 链式栈接口的定义头文件 */ #define true 1 #define fals ...
- DCNN相关算法资料
https://blog.csdn.net/hjimce/article/details/49955149 讲的很详细
- 如何在ASP.NET页面中使用异步任务(PageAsyncTask)
在页面加载期间,可能有些操作是要比较耗用时间的(例如调用外部资源,要长时间等待其返回),正常情况下,这个操作将一直占用线程.而大家知道,ASP.NET在服务端线程池中的线程数是有限的,如果一直占用的话 ...
- platform device和platform driver简述
首先我们在module_init中使用platform_driver_register来注册我们的驱动.一般来说platform_driver_register放在module_init的最后调用,因 ...
- bzoj4385 Wilcze doły
Description 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. Input 第一 ...
- [转][SVN]常用操作
1. Commit 提交当前代码到 SVN 服务器. 2. 引用第三方类库时,不要从安装位置引用,而是在解决方案下,添加一个 lib 的目录,把需要的程序集复制到这里,然后从 lib 目录引用. 3 ...
- request-2高级用法
会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个session示例发出的所有请求之间保持cookie cookie与session的区别 1.cookie数据存放在客户的浏览器上,sess ...
- selenium java-2 chrome driver与对应版本
chrome driver下载地址:https://npm.taobao.org/mirrors/chromedriver driver与chrome的对应关系: 1.进入最新的driver,查看no ...
- DIV+CSS如何让文字垂直居中?(转)
此篇文章转自网络,但是我忘了原文地址,如果有人知道,麻烦告知一声~ 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少 ...