首先打开VS命令行工具。可以按 Win + S ,输入 prompt 来找到它。如图。
解压 LuaJIT 源码,并进入到解压目录 /src 下。输入 msvcbuild 开始编译。
看到 === Successfully built LuaJIT for xxxxx === 则是编译成功了。
在解压目录 /src 下可以找到编译生成的 luajit.exe 和 lua51.dll .
打开cmd。
如果没有添加环境变量则先定位到盯手斗LuaJit安装目录薯明。
输入 luajit -b +Lua脚本+目标文件名,即可编译脚本。
cocos2d-x中luajit的使用新版本的cocos2d-x使用了luajit来替代原始的lua,好处一是可以极大的提高运行速度(android下可以开jit,运行速度提高10~60倍,ios下不可谈慎以开jit,运行速度也可以提高2~3倍)。 二是luajit编译的字节码现阶段来说无法反编译,也就是说无法破解。 这里对luajit进行详细的说明。
1、基本使用。这个很简单,不用修改任何代码,与lua5.1完全兼容。 对应的头文件和库要替换成luajit的(与lua命名相同)
2、发布时编译成字节码。
这个需要luajit.exe的执行文件。 编译方法(windows): 在(http://luajit.org/download.html)下载源代码,使用vs的命令行工具,执行msvc.bat进行编译。 我最开始使用cygwin直接执行make结果出了很多编译错误和诡异的问题。 其实直接使用批处理山衡才是正确的方式。
编译完成后,要注意luajit.exe和源代码src/jit文件夹要同时并且匹配使用。否则运行时会出现 "unknown luaJIT command or jit.* modules not installed"的错误。
编译成字节码的命令如下: luajit -b 原始文件 输出文件
更多详细说明含唯敬可以直接执行 luajit -b来获取。 这里还要注意,输出文件最好保持.lua的扩展名,否则require文件的时候会提示找不到文件。除非require里面使用的完整名字。
我在编译字节码时还碰到了一个问题,就是无论编译什么文件都提示这个 "luajit '=' expected near '<eof>'" ,后来换了luajit的版本后就没有出现了。可能跟我一开始手欠改了luajit源代码有关。
3、编译luajit的静态库文件(for android)
编译字节码所用的执行文件和我们开发程序时使用的静态库文件要保持版本一致。 windows版本所需要的文件在编译执行文件时就已经生成。
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中使用。
解决这个问题其实很简单,就是用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
接下来就可以使用luajit.exe编译lua脚本的bytecode了:luajit -b [脚本名] [编译后的脚本名],执行完后会在src目录下生成一个已经编译成bytecode的jit.lua文件
下面把编译之后的jit.lua放在2dx中试一下,以HelloLua工程为基础,把jit.lua放到\samples\Lua\HelloLua\Resources下,修改AppDelegate.cpp中的lua调用为std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename("jit.lua")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)