最近看到 luajit 的最新版本2.1支持arm64了,所以尝试了下用最新的luaJit替换quick-x的ios工程引用的lua5.1.5。对安卓的工程不是特别熟悉,等有时间再来研究吧。或者其他有兴趣朋友可以尝试修改下安卓工程。
下面是ios的操作步骤:
下载LuaJit
通过GIT下载Luajit代码
git clone http://repo.or.cz/luajit-2.0.git
进入Luajit下载代码目录签出分支v2.1
git checkout v2.1
放入到工程文件中
把luajit文件夹放入到quick-x工程目录lib/cocos2d-x/scripting/lua/luajit/下,重命名为LuaJIT-2.1
新建build_ios.sh文件
在luajit文件夹下创建一个build_ios.sh文件,文件内容
#!/bin/sh
DIR="( cd "( dirname “${BASH_SOURCE}” )" && pwd )"
LIPO=“xcrun -sdk iphoneos lipo”
STRIP=“xcrun -sdk iphoneos strip”
SRCDIR=$DIR/LuaJIT-2.1
echo $SRCDIR
DESTDIR=$DIR/ios
echo $DESTDIR
IXCODE=xcode-select -print-path
ISDK=$IXCODE/Platforms/iPhoneOS.platform/Developer
INFOPLIST_PATH=IXCODE/Platforms/iPhoneOS.platform/version.plist
BUNDLE_ID=(/usr/libexec/PlistBuddy -c “Print :CFBundleShortVersionString” "{INFOPLIST_PATH}")
ISDKVER=iPhoneOS{BUNDLE_ID}.sdk
if “{ISDKVER}" = "iPhoneOS8.0.sdk" ] || "{ISDKVER}” = “iPhoneOS8.2.sdk” ]; then
ISDKP=$IXCODE/usr/bin/
else
ISDKP=$ISDK/usr/bin/
fi
if ! -e $ISDKP/ar ]; then
sudo cp $ISDK/usr/bin/ar $ISDKP
fi
if ! -e $ISDKP/ranlib ]; then
sudo cp $ISDK/usr/bin/ranlib $ISDKP
fi
if ! -e $ISDKP/strip ]; then
sudo cp $ISDK/usr/bin/strip $ISDKP
fi
rm “$DESTDIR”/*.a
cd $SRCDIR
make clean
ISDKF="-arch armv7 -isysroot $ISDK/SDKs/ISDKVER"
if {ISDKVER} = “iPhoneOS8.0.sdk” ] || ${ISDKVER} = “iPhoneOS8.2.sdk” ]; then
make HOST_CC=“gcc -m32 -arch i386” TARGET_FLAGS="$ISDKF" TARGET=arm TARGET_SYS=iOS
else
make HOST_CC=“gcc -m32 -arch i386” CROSS=$ISDKP TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
fi
mv “$SRCDIR”/src/libluajit.a “$DESTDIR”/libluajit-armv7.a
make clean
ISDKF="-arch armv7s -isysroot $ISDK/SDKs/ISDKVER"
if {ISDKVER} = “iPhoneOS8.0.sdk” ] || ${ISDKVER} = “iPhoneOS8.2.sdk” ]; then
make HOST_CC=“gcc -m32 -arch i386” TARGET_FLAGS="$ISDKF" TARGET=arm TARGET_SYS=iOS
else
make HOST_CC=“gcc -m32 -arch i386” CROSS=$ISDKP TARGET_FLAGS="$ISDKF" TARGET_SYS=iOS
fi
mv “$SRCDIR”/src/libluajit.a “$DESTDIR”/libluajit-armv7s.a
make clean
make CC=“gcc -m32 -arch i386” clean all
mv “$SRCDIR”/src/libluajit.a “$DESTDIR”/libluajit-i386.a
make clean
ISDKF="-arch arm64 -isysroot $ISDK/SDKs/$ISDKVER"
make HOST_CC=“gcc " CROSS=”$ISDKP" TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS
mv “$SRCDIR”/src/libluajit.a “$DESTDIR”/libluajit-arm64.a
make clean
make CC=“gcc -m64 -arch x86_64” clean all
mv “$SRCDIR”/src/libluajit.a “$DESTDIR”/libluajit-x86_64.a
$LIPO -create “$DESTDIR”/libluajit-*.a -output “$DESTDIR”/libluajit.a
$STRIP -S “$DESTDIR”/libluajit.a
$LIPO -info “$DESTDIR”/libluajit.a
rm “$DESTDIR”/libluajit-*.a
make clean
这个文件会编译生成支持armv7,armv7s,arm64,i386,x86_64的.a文件,并且把他们合并成一个libluajit.a文件,这样就可以把它导入到我们的工程里面了。
(注意:文件里面的iPhoneOS8.0.sdk,iPhoneOS8.2.sdk请更根据你自己的SDK版本调整)
文件创建完成后调用文件,你就可以在luajit/ios文件夹下看到生成好的libluajit.a文件了。
创建include文件夹
生成完.a文件后,我们还需要创建一个头文件存放的文件夹,在luajit下新建一个include文件夹,把LuaJIT-2.1下的lauxlib.h,lua.h,luaconf.h,lualib.h复制到include文件夹下。

将libluajit.a导入Xcode工程中替换lua-5.1.5
打开quickcocos2dx.xcodeproj工程文件
首先需要删除工程中对lua-5.1.5的引用
然后导入luajit下的include和iOS文件夹到工程中来

在工程设置的Header Search Paths中删除lua-5.1.5路径,添加luajit/include的路径
在Library Search Paths中增加luajit/ios的路径
在Link Binary With Libraries里面添加libluajit
到这里设置基本就完成了。
在你的MAC上安装luajit2.1
首先修改quick-x工程中bin/install_luajit.sh文件中的
LUAJIT_SRC_DIR="$ROOT_DIR/lib/cocos2d-x/scripting/lua/luajit/LuaJIT-2.1"
然后执行该.sh文件
然后在终端中执行luajit -v

如果看到版本为2.1.0-alpha就OK了。
注意:如果你以前在该MAC上安装过其他版本的luajit,很可能显示的还是以前的版本。这个时候首先执行which luajit找到你luajit的安装目录
➜ ~ which luajit
/usr/local/bin/luajit
然后切换到该目录下
然后执行 l 命令查看该目录下的所有文件
比如我的电脑上一共安装了2.0.2,2.0.3, 2.1.0三个版本的luajit。关键是看luajit这个软连接是不是指向luajit-2.1.0的,如果不是则删除这个软连接,重新创建一个指向最新版本luajit的软连接。
使用luajit预编译生成.zip包
到quick-x工程目录下的bin/lib下,修改compile_scripts.php文件中的第18行为:
array(‘jit’, ‘jit’, 1, true, ‘using luajit compile framework’),
然后调用bin下的make_framework_package.sh生成新的framework包替换游戏工程里面的framework包就可以了。
到这里用luajit arm64替换quick-x2.2.6里面使用的lua-5.1.5基本就完成了,请到真机上测试下。






