Unity luajit集成

丌官积厚
2023-12-01

集成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等.

 类似资料: