以下是使用原生的lua解释器编译字节码:
1、新建一个名为1.lua的文件,里面仅仅有一句话print("Hello Lua"),新建一个空的out.lua脚本文件
2、開始--执行--cmd
3、luac -o out.lua 1.lua
注: luac - o [编译后脚本名] [脚本名],必要时带上脚本路径
回车之后,再打开out.lua就能够看到编译好的字节码了
然后实验一下,运行这个字节码脚本。能够看到lua原生的解释器能够直接解析luac编译出来的bytecode脚本。非常方便!
重点:
做完了以上的一系列之后,我照着这种方法编译项目中的脚本。然后在cocos2dx环境下使用,发现不行!
于是又查了一下资料,发现2dx使用的是luajit,lua原生编译出来的bytecode和luajit是不兼容的,所以照着上面方法编译出来的bytecode脚本无法在2dx中使用。
解决问题事实上非常easy,就是用2dx自带的luajit编译lua脚本,以下附上luajit编译bytecode的方法:
1、在cocos2d-x-2.2.3\scripting\lua\luajit\LuaJIT-2.0.1\src文件夹下有个msvcbuild.bat批处理文件,须要先把luajit.exe这个东西给编译出来。
2、打开visual studio的命令行工具。这个仅仅要装了vs都会有,在安装文件夹里面能够找到。
3、用vs的命令行工具cd到luajit的src文件夹
4、运行msvcbuild.bat批处理文件。编译出luajit.exe
编译完毕之后。会在src文件夹下生成一系列文件,当中有一个luajit.exe
跳到文件夹:lib\cocos2d-x\scripting\lua\luajit\LuaJIT-2.0.2\src
运行命令:luajit.exe -b test.lua test.lua
接下来就能够使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名]。运行完后会在src文件夹下生成一个已经编译成bytecode的jit.lua文件
以下把编译之后的jit.lua放在2dx中试一下,以HelloLuaproject为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下,改动AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua");
执行结果为:
至此。luajit编译bytecode加密已完毕!
严重注意:样例中,我把编译前后的脚本名字取的不一样,是为了让大家看出差异化来,实际在项目中使用的时候。脚本的名字编译前后最好都一致,不然在脚本中相互require的时候可能会出现故障!
bytecode文件的格式是lua