luajit 64位 for cocos2dx 编译ios解决方法

 

最近luajit发布了64位beta版,因为appstore上线必须是64位的应用,并且个人游戏项目用到lua脚本,因此必需要用到64位的luajit来编译lua脚本。ios

方法以下:xcode

在luajit官网下载luajit源码:服务器

http://luajit.orgapp

解压后,须要经过在luajit的文件夹上层目录,打开终端编译,编译方法以下命令:iphone

LUAJIT=./luajit-2.1.0-beta2函数

DEVDIR=`xcode-select -print-path`/Platforms  ui

IOSVER=iPhoneOS9.3.sdk  lua

SIMVER=iPhoneSimulator.sdk  code

IOSDIR=$DEVDIR/iPhoneOS.platform/Developer  orm

SIMDIR=$DEVDIR/iPhoneSimulator.platform/Developer  

IOSBIN=$DEVDIR/../Toolchains/XcodeDefault.xctoolchain/usr/bin/  

SIMBIN=$SIMDIR/usr/bin/  

  

BUILD_DIR=$LUAJIT/build  

  

rm -rf $BUILD_DIR  

mkdir -p $BUILD_DIR  

rm *.a 1>/dev/null 2>/dev/null  

  

echo =================================================  

echo ARMV7 Architecture  

ISDKF="-arch armv7 -isysroot $IOSDIR/SDKs/$IOSVER"  

make -j -C $LUAJIT HOST_CC="gcc -m32 " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=armv7 TARGET_SYS=iOS clean  

make -j -C $LUAJIT HOST_CC="gcc -m32 " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=armv7 TARGET_SYS=iOS   

mv $LUAJIT/src/libluajit.a $BUILD_DIR/libluajitA7.a  

  

echo =================================================  

echo ARM64 Architecture  

ISDKF="-arch arm64 -isysroot $IOSDIR/SDKs/$IOSVER"  

make -j -C $LUAJIT HOST_CC="gcc " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS clean  

make -j -C $LUAJIT HOST_CC="gcc " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS   

mv $LUAJIT/src/libluajit.a $BUILD_DIR/libluajit64bit.a  

  

echo =================================================  

echo IOS Simulator Architecture  

ISDKF="-arch x86_64 -isysroot $SIMDIR/SDKs/$SIMVER -miphoneos-version-min=7.0"  

make -j -C $LUAJIT HOST_CFLAGS="-arch x86_64" HOST_LDFLAGS="-arch x86_64" TARGET_SYS=iOS TARGET=x86_64 clean  

make -j -C $LUAJIT HOST_CFLAGS="-arch x86_64" HOST_LDFLAGS="-arch x86_64" TARGET_SYS=iOS TARGET=x86_64 amalg CROSS=$IOSBIN TARGET_FLAGS="$ISDKF"  

  

  

mv $LUAJIT/src/libluajit.a $BUILD_DIR/libluajitx86_64.a  

  

libtool -o $BUILD_DIR/libluajit21.a $BUILD_DIR/*.a 2> /dev/null  

  

  

mkdir -p $BUILD_DIR/Headers  

cp $LUAJIT/src/lua.h $BUILD_DIR/Headers  

cp $LUAJIT/src/lauxlib.h $BUILD_DIR/Headers  

cp $LUAJIT/src/lualib.h $BUILD_DIR/Headers  

cp $LUAJIT/src/luajit.h $BUILD_DIR/Headers  

cp $LUAJIT/src/lua.hpp $BUILD_DIR/Headers  

cp $LUAJIT/src/luaconf.h $BUILD_DIR/Headers  

  

mv $BUILD_DIR/libluajit21.a ./

 

 

注意的是,以上的IOSVER变量必须设置为当前系统的ios sdk的版本号。

 

编译好后,在luajit文件夹下会新增了build文件夹,里面有三个库和Headers文件夹,Headers里面

存放的是项目必须包含的头文件,另外还有三个库.a库:

libluajit64bit.a:是arm 64位的库,用在ios 64位设备上,

libluajitA7.a:是arm 32位的库,用在ios 32位设备上,

libluajitx86_64:是x86指令的库,用在pc和iOS模拟器上。

 

将对应平台的库和全部头文件导入项目中用于解析luajit的字节码。

 

因为iphone5s以上虚拟机须要x86_64支持,luajit为了支持此模式须要在other linker flags中增长参数(注意,只须要对模拟器添加参数,针对ios不能添加,不然apple不会经过审核):

-pagezero_size 10000 -image_base 100000000

 

由于arm64使用了最新的lj_gc64与lj_fr2的c库,必须经过gc64库编译lua脚本,因此,咱们须要在真机上编译,或者在

luajit的源码中,找到lj_arch.h文件,在文件开始地方加入宏:

#define LUAJIT_ENABLE_GC64   ,让编译的时候使用gc64位库编译。

 

 

如下的代码是我在廖大写的编译方法,其实就是将lua脚本放在source文件夹下,

经过lua的string.dump将脚本转成对应平台的字节码,而后导出编译后的

字节码,具体实现看编译项目的main.lua, 我将编译项目放到百度云盘(http://pan.baidu.com/s/1dFCwoO5),方便下载,

项目编译能够在ios模拟器或者真机上编译,若是真机没有越狱,能够经过ftp将编译后

的lua脚本发到ftp服务器上,一样更方便的能够经过在ios模拟器上编译, 而后在可写路径找到编译后的脚本,编译后将脚本拷到

本身的项目中就能完美运行。

 

注意的是,若是函数main.lua不能经过

executeScriptFile方法执行,必须经过require来执行main.lua

 

 

转载请注明出处,from 博客园 HemJohn

相关文章
相关标签/搜索