轉自:http://blog.csdn.net/odiecn/article/details/42499233
系統環境
優山美地 OS X Yosemite
Xcode 6.1.1
cocos2d-x 3.1.1
下載LuaJit
編輯腳本編譯Luajit v2.1
#!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" LIPO="xcrun -sdk iphoneos lipo" STRIP="xcrun -sdk iphoneos strip" IXCODE=`xcode-select -print-path` ISDK=$IXCODE/Platforms/iPhoneOS.platform/Developer ISDKVER=iPhoneOS8.1.sdk ISDKP=$IXCODE/usr/bin/ 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 make clean ISDKF="-arch arm64 -isysroot $ISDK/SDKs/$ISDKVER" make HOST_CC="gcc " CROSS="$ISDKP" TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS
也可以將git下的luajit復制到cocos2d-x對應的luajit路徑下
之后將附件里的shell腳本替換目錄下存在的build_ios.sh腳本,運行該腳本可以生成一個新的Luajit.a包以及一套完整的支持arm64的lib for cocos2dx3.1.1。
只要大家自行替換項目目錄下
cocos2d-x/external/ 對應的ios目錄下的.a文件就可以
同時XCODE6新升級后需要有幾點補丁修改
修改1:
在AppDelegate.cpp加入代碼
extern "C" { #if defined (__unix) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) #ifndef __ENABLE_COMPATIBILITY_WITH_UNIX_2003__ #define __ENABLE_COMPATIBILITY_WITH_UNIX_2003__ #include <stdio.h> #include <dirent.h> FILE *fopen$UNIX2003( const char *filename, const char *mode ) { return fopen(filename, mode); } size_t fwrite$UNIX2003( const void *a, size_t b, size_t c, FILE *d ) { return fwrite(a, b, c, d); } char *strerror$UNIX2003( int errnum ) { return strerror(errnum); } DIR *opendir$INODE64(const char * a) { return opendir(a); } struct dirent *readdir$INODE64(DIR *dir) { return readdir(dir); } #endif #endif</dirent.h></stdio.h> }
修改2:
iphone5s以上虛擬機需要x86_64支持
luajit為了支持此模式需要在other linker flags中增加參數 -pagezero_size 10000 -image_base 100000000
實際上在arm64平台下的luajit的bytecode與早前的bytecode有區別無法直接在mac下編譯后在arm64平台使用。它使用了最新的lj_gc64與lj_fr2。所以我們的bytecode編譯工作不得不轉移到arm64平台下進行,也就是我們目前的iphone5s,iphone6等。為了bytecode我寫了一個簡單的生成工具,用於編譯工程。
工具包使用的是cocos2d-x 3.1.1版本的luajit,如何讓3.1.1使用luajit for arm64在上一篇文章我已經詳細的介紹過了。工具包使用了另一個lua擴展工具lfs,詳細說明:http://math2.org/luasearch/lfs.html。以及cocos2dx本已捆定了的luasocket庫。
准備工作:
1.在內網中創建一個ftp服務器,windows自帶了ftp組件,具體如何配置請自行百度。
2.源碼放入到src/source目錄下
3.運行程序在arm64平台上后,程序會自動上傳編譯后的源碼到ftp的release目錄下,並自動創建目錄結構。
4.main.lua為程序入口,ftpServer為你ftp服務的ip地址,ftpUser為用戶名,ftpPassword為密碼