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

來源:互聯網
上載者:User

標籤:

 

最近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, 我將編譯項目放到百度雲端硬碟(上傳中。。。。),方便下載,

項目編譯可以在ios模擬器或者真機上編譯,如果真機沒有越獄,可以通過ftp將編譯後

的lua指令碼發到ftp伺服器上,同樣更方便的可以通過在ios模擬器上編譯, 然後在可寫路徑找到編譯後的指令碼,編譯後將指令碼拷到

自己的項目中就能完美運行。

 

注意的是,如果函數main.lua不能通過

executeScriptFile方法執行,必須通過require來執行main.lua

 

 

轉載請註明出處,from 部落格園 HemJohn

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.