转自: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为密码