`
yanfaguanli
  • 浏览: 663263 次
文章分类
社区版块
存档分类
最新评论

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版本所需要的文件在编译执行文件时就已经生成。

android编译需要使用NDK在windows下进行交叉编译。 这里我一开始使用cygwin没有成功。一大堆编译错误。后来换mingw就相对顺利了。 我使用的是msys+mingw的环境(在装msysgit时附带装好的..) 编译脚本参考了cocos2d-x本身的和luajit官网的。修改如下:

#!/bin/sh
SRCDIR=/c/msysgit/msysgit/LuaJit-2.0.2
DIR=/d/MyProj/develop/lib/cocos2d-x/scripting/lua/luajit

cd "$SRCDIR"

NDK=/d/adt-bundle-windows/android-ndk-r8e
NDKABI=8
NDKVER=$NDK/toolchains/arm-linux-androideabi-4.7
NDKP=$NDKVER/prebuilt/windows/bin/arm-linux-androideabi-
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"

#Android/ARM, armeabi (ARMv5TE soft-float), Android 2.2+ (Froyo)
DESTDIR=$DIR/android/armeabi
rm "$DESTDIR"/*.a
make clean
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF"

if [ -f $SRCDIR/src/libluajit.a ]; then
    mv $SRCDIR/src/libluajit.a $DESTDIR/libluajit.a
fi;

# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.0+ (ICS)
NDKARCH="-march=armv7-a -Wl,--fix-cortex-a8"
DESTDIR=$DIR/android/armeabi-v7a
rm "$DESTDIR"/*.a
make clean
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF $NDKARCH"

if [ -f $SRCDIR/src/libluajit.a ]; then
    mv $SRCDIR/src/libluajit.a $DESTDIR/libluajit.a
fi;

# Android/x86, x86 (i686 SSE3), Android 4.0+ (ICS)
NDKABI=14
DESTDIR=$DIR/android/x86
NDKVER=$NDK/toolchains/x86-4.7
NDKP=$NDKVER/prebuilt/windows/bin/i686-linux-android-
NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-x86"
rm "$DESTDIR"/*.a
make clean
make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_SYS=Linux TARGET_FLAGS="$NDKF"

if [ -f $SRCDIR/src/libluajit.a ]; then
    mv $SRCDIR/src/libluajit.a $DESTDIR/libluajit.a
fi;

make clean

最开始设置好SRCDIR和DIR这个是Luajit源代码的目录和编译好的库文件的安装目录。 NDK指定的是android ndk的安装目录。 原本cocos2d-x的脚本自动检测host(与这行代码相关 NDKP=$NDKVER/prebuilt/windows/bin/arm-linux-androideabi-),但是不太管用,所以统一修改为windows

这里还要注意下,我在编译armv7a的时候总是出现minilua.exe执行错误,无法编译成功,去掉-mfloat-abi=softfp后编译正常。

分享到:
评论

相关推荐

    cocos2d-x+luaJIT

    cocos2d-x +luajit使用,测试工程文件,使用luajit生成文件

    Cocos2d-Lua-社区:基于Cocos2d-x 4.0,打造易用稳定的Cocos2d-x lua引擎

    Cocos2d-Lua社区Cocos2d-Lua-Community是Cocos2d-x 4.0的改进,并且易于使用Lua游戏引擎。 它是与Quick-Cocos2dx-Community v3.7.x兼容的Lua“框架”。得到帮助 QQ群:社区版千人群(1群)号:361920466社区版2群:...

    cocos2d-x 支持arm64-v8a 的 luajit.a

    LuaJIT 2.1.0-beta3,支持cocos2d-x编译android的arm64-v8a版本,支持 TargetSDKVersion 大于等于30的情况,不黑屏。

    luajit64 for cocos2d-x 2.2.6 above

    lluajit64 for ios,ffi支持在lua脚本里嵌入C语言

    cocos2d-x-3rd-party-libs-bin.zip支持的libluajit.a文件

    用xcode运行cocos2d,5s及以上的设备会崩溃在lua_open(),将下载下来的ios中的libluajit.a文件替换到自己工程就好了

    Cocos2dx-lua xxtea解密工具

    可以快速解出cocos-lua, quick-cocos引擎使用xxtea加密的lua与zip文件。对luajit编译过的bytecode毫无办法。 资源来自吾爱破解论坛,作者ID:skyxiaoyu。感谢作者的分享

    luajit.zip

    coco3.17.2崩溃,替换luajit就ok了。官网下载太慢了提供一个地址。方便开发cocos2d-x的同学使用。我自己遇见这个问题也是看了两天。相关的文章有点少。可能大家都搞Unity去了吧。

    ZeroBraneStudioEduPack.zip

    ZeroBrane Studio 是一个轻量级的Lua IDE。拥有代码提示、语法高亮、远程调试、代码分析、调试等功能。支持多个 Lua 引擎 (LuaJIT, L&ouml;... 可以很好的结合cocos2d-x做游戏开发。调试、代码提示都可以完美的解决。

    libluajit.a

    cocos-lua项目升级支持安卓11需要的文件,文件放置cocos2d-x\external\lua\luajit\prebuilt\android\arm64-v8a

    gbc-core:GameBox Cloud Core-基于Lua和OpenResty的游戏服务器框架

    欢迎使用GameBox Cloud Core GameBox Cloud Core为开发者提供一个稳定可靠,可扩展的服务端架构,...使用Lua脚本语言开发服务端功能还有一个巨大的好处,那就是可以和使用Cocos2d-Lua(quick-cocos2d-x)的客户端共享

    luajit的v8a运行库

    luajit的v8a运行库 解决luajit:2.1.0-bate2、2.1.0-bate3 在Android编译包时候tartgetsdk=30的时候c++和lua调用...cocos2dx引擎适应、其他c++和lua交互使用luajit的应用都适应 解决android11系统中luajit运行异常问题

Global site tag (gtag.js) - Google Analytics