關於ios下arm64 luajitv2.1編譯


轉自:http://blog.csdn.net/odiecn/article/details/42499233

系統環境

優山美地 OS X Yosemite

Xcode 6.1.1

cocos2d-x 3.1.1

 

下載LuaJit

通過GIT下載Luajit代碼
git clone http://repo.or.cz/luajit-2.0.git
進入Luajit下載代碼目錄簽出分支v2.1
git checkout v2.1
 

編輯腳本編譯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

 
以上就可以保證在新版的xcode6.1.1中完美的運行arm64與虛擬機x86_64的luajit代碼了。
最后感謝xl同學給予的幫助!
 
生成好的.a文件與luajit打包sh腳本請通過百度網盤下載

實際上在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為密碼

 

打包工具源碼下載地址

 


免責聲明!

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



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