Cocos2d x中luajit的使用

2021-07-02 00:41:17 字數 2955 閱讀 8466

新版本的cocos2d-x使用了luajit來替代原始的lua,好處一是可以極大的提高執行速度(android下可以開jit,執行速度提高10~60倍,ios下不可以開jit,執行速度也可以提高2~3倍)。 二是luajit編譯的位元組碼現階段來說無法反編譯,也就是說無法破解。 這裡對luajit進行詳細的說明。

1、基本使用。這個很簡單,不用修改任何**,與lua5.1完全相容。  對應的標頭檔案和庫要替換成luajit的(與lua命名相同)

2、發布時編譯成位元組碼。

編譯完成後,要注意luajit.exe和源**src/jit資料夾要同時並且匹配使用。否則執行時會出現  "unknown luajit command or jit.* modules not installed"的錯誤。

編譯成位元組碼的命令如下: luajit -b 原始檔案 輸出檔案

更多詳細說明可以直接執行 luajit -b來獲取。  這裡還要注意,輸出檔案最好保持.lua的副檔名,否則require檔案的時候會提示找不到檔案。除非require裡面使用的完整名字。

我在編譯位元組碼時還碰到了乙個問題,就是無論編譯什麼檔案都提示這個  "luajit  '=' expected near ''"  ,後來換了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來替代原始的lua,好處一是可以極大的提高執行速度 android下可以開jit,執行速度提高10 60倍,ios下不可以開jit,執行速度也可以提高2 3倍 二是luajit編譯的位元組碼現階段來說無法反編譯,也就是說無法破解。這裡對luajit進行詳細...

關於cocos2dx中tableView的一些理解

先看 h檔案中 ifndef helloworld scene h define helloworld scene h include cocos2d.h include cocos ext.h using ns cc using ns cc ext class helloworld public ...

cocos2d x中的精靈

所有的遊戲都有 sprites 精靈,你可能知道或者不知道它們是什麼。精靈就是遊戲中在場景裡進行移動的物件。你可以操縱它們。精靈可能是遊戲中最主要的角色。我知道你在想什麼 難道每乙個圖形物件都是精靈sprite嗎?當然不是!為什麼?當你操縱乙個精靈的時候,它就是乙個精靈。如果你不對它進行操作,那它就...