集成ulua到unity后,尝试使用luajit编译字节码。
我们使用的是ngui官方github的分支. (Readme中最近的更新记录是2016-01-24)
其中使用的编译字节码环境如下
luajit: win, android 使用luajit 2.0.4stable
luavm: mac使用luac编译, ios 使用luac (luavm)
luajit_ios: ios可以选择使用luajit2.1beta编译字节码
我们使用jenkins构建ulua和配置文件,但是ulua中在mac环境下使用的编译字节码是luac, windows下才是luajit, 所以我们要自己编译luajit的mac版本.
我们开始以为安卓平台 libulua.so里面潜入的解析器兼容luajit 2.1beta编译的字节码, 所以到http://luajit.org/下载了luajit2.1beta的源代码
make
make install PREFIX=~/Download/luajit/
生成bin目录后, 拷贝share里面的jit目录到luajit可执行程序的同级目录(否则编译字节码会报modules没有安装等问题), 然后可以使用luajit.
find ~/work/netjoy/ibilis/NJ_LOG/Assets/Lua -name "*.lua" -exec ./luajit-2.1.0-beta2 -b {} {} \;来生成文件,
如果希望使用out作为文件名,使用luajit
find ~/work/netjoy/ibilis/NJ_LOG/Assets/Lua -name "*.lua" -exec ./luajit-2.1.0-beta2 -b {} {}.out \;
使用2.1.0beta编译字节码后,在android上无法解析,报bad header in precompiled chunk
后来检查我们集成的ulua代码中自带的的jit中bcsave.lua版本不是20004, 和我们下载使用的2.1.0里面的bcsave.lua版本不同。 所以下载2.0.4stable版本的,发现bcsave.lua中也是20004, 重新编译字节码, 就可以在android上正常加载了.
总结:
1. 在目前的版本中, luajit的解析已经在ulua.so中自动集成了, 无须添加新组件,代码,无须修改代码
2. 我们的工作只是外部生成lua字节码而已. 生成代码需要下载luajit的源代码,自己编译。然后修改appconst.cs里面的lua encode值,便于使用打lua字节码,或者我上面提供的命令行来编译字节码.
3. 集成任何一个第三方库的时候, 一定要记录使用的版本号,及详细阅读说明,不仅限于阅读doc, read, 甚至要看github上的提交说明, wiki等.