ulua之LuaByteMode模式

ulua使用lua的字节码模式


什么是luajit?


  • luajit就是lua的一个特殊版本,可以兼容lua5.1,也可以独立于lua使用。luajit比原生lua速度更快,效率更高。
  • ulua(cstolua)其实已经集成了luajit,lua想要编译为字节码,可以使用luac编译,也可以使用luajit编译
  • 那么ulua使用ByteMode模式,其实就是luajit的字节码模式。


编译luajit


  • 下载luajit源码
  • 打开vs命令行(需要安装visual studio)
  • cd到luajit的src下(下载luajit的源码目录)
  • 执行msvcbuild.bat编译,生成luajit.exe和lua51.dll
  • 新建文件夹LuaJIT
  • 把编译的luajit.exe 和lua51.dll拷贝到LuaJIT下
  • 把luajit源码下的jit文件夹也拷贝到LuaJIT下


luajit编译lua字节码


  • 打开cmd命令行,cd到LuaJIT目录下(或者吧LuaJIT目录添加到Path环境变量下)
  • 执行编译命令:luajit -b source.lua target.lua(source.lua是源码,会自动生成target.lua)
执行luajit -b 时,如果报错: LuaJit: unknown luaJIT command or jit.* modules not installed 

解决方案:

  • 1.luajit.exe的统计目录下没有jit文件夹
  • 2.按照luajit官方的说法,jit文件夹需要放到一个lua文件夹下(可以试一下)
  • 3.本地安装有原生lua,导致lua的环境变量和luajit冲突,卸载原生lua就可以了。


ulua下编译lua字节码(pc、android)

以上步骤是luajit的自定义编译步骤,但是ulua框架中已经帮我们集成了luajit,并且集成了批量编译和加载的代码。

  • 1.修改AppConst.LuaByteMode=true;就是开启了ulua编译字节码模式。
  • 2.点击编辑器的LuaFramework下的Build xxx Resources,即可生成相应的lua字节码。
  • 3.由于topameng已经帮我们写好了LuaDLL.luaL_loadbuffer方法,我们什么都不用修改了,直接就可以在PC和Android下正常运行了。
  • 注意
  • * 1.Build xxx Resources完毕,发现有lua的文件夹,但是没有lua的字节码脚本,说明你的项目luajit环境有问题,按照上面的自己编译luajit的方法去检测下,如果自己的可以正常编译,那么框架的就OK了。
    * 2.如果项目在PC下正常运行,但是安装到Android手机就报错:tolua.lua: cannot load incompatible bytecode,那么说明你的运行时luajit和编译时luajit版本不一致,你需要删除LuaEncoder文件夹下的luajit,然后,把LuaFramework下的luajit拷贝过来,然后在运行就可以了。


ulua下编译lua字节码(Mac,IOS)

mac和ios下使用的是luac





你可能感兴趣的:(Unity,Lua)