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

相關文章
相關標籤/搜索