luajit 64位 for cocos2dx 編譯ios解決方法


 

最近luajit發布了64位beta版,由於appstore上線必須是64位的應用,而且我的游戲項目用到lua腳本,所以必須要用到64位的luajit來編譯lua腳本。

方法如下:

在luajit官網下載luajit源碼:

http://luajit.org

解壓后,需要通過在luajit的文件夾上層目錄,打開終端編譯,編譯方法如下命令:

LUAJIT=./luajit-2.1.0-beta2

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

IOSVER=iPhoneOS9.3.sdk  

SIMVER=iPhoneSimulator.sdk  

IOSDIR=$DEVDIR/iPhoneOS.platform/Developer  

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM