最近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

luajit 64位 for cocos2dx 编译ios解决方法的更多相关文章

  1. Window8.1 64位无法使用Debug命令的解决方法[附牛人代码]

    偶然看到网上一篇文章,讲的是世界黑客编程大赛第一名的一个很酷的程序,大小仅有4KB,使用debug命令执行. 悲催的是win8.1的debug命令不能使用. 错误例如以下: 解决方法例如以下: 1. ...

  2. Winio驱动在64位windows下无法使用的解决方法

    C#在使用WinIo的驱动开发类似按键精灵一类工具的时候,需要对相关的驱动进行注册才能正常启动,找了下资料,资料来自: http://jingyan.baidu.com/article/642c9d3 ...

  3. VS2013在Windows7 64位上变慢的解决方法

    重装了windows7系统,又重装了vs2013,发现在打开vs2013.编译工程及调试的时候,vs2013都会变的比较慢,参考网上资料,这里列出几种可能的解决方法: 1.      打开工具--&g ...

  4. win7 64位平台编译的程序在XP 32位平台无法运行的解决方法

    win7 64位平台编译的程序在XP 32位平台无法运行的解决方法 vs2010的开发环境,制作了一个DLL库.但DLL在XP 32位平台一直无法使用.解决方法如下: 右键项目,属性->配置属性 ...

  5. Ubuntu12.04安装64位系统出现编译错误error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or dir

    问题: Ubuntu12.04安装64位系统出现编译错误error while loading shared libraries: libz.so.1: cannot open shared obje ...

  6. Hadoop 3.2.1 win10 64位系统 vs2015 编译

    Hadoop 3.2.1 win10 64位系统 vs2015 编译 1        环境配置 1.1   JDK下载安装 1.1.1         下载 JDK 1.8    (jdk1.8.0 ...

  7. 64位 CentOS NDK 编译 FFMPEG

    64位 CentOS NDK 编译 FFMPEG 一.           参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...

  8. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  9. 64位CentOS上编译 Hadoop 2.2.0

    下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后.总是出现这样的警告: WARN util.NativeCodeLoader: Unable to load n ...

随机推荐

  1. JS判断请求来自Android手机还是iPhone手机

    <script type="text/javascript"> var browser = { versions: function () { var u = navi ...

  2. 微信小程序开发4-JSON

    1.JSON是JavaScript语法的子集 2.JSON的语法规则 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 3.JSON 值可以是: 数字(整数或浮点数) 字符串(在双引 ...

  3. 第四次作业-第一次scrum冲刺

    团队成员 周斌 舒 溢 许嘉荣 唐 浩 黄欣欣 1.第一次冲刺任务安排 对Github上的HUSTOJ开源项目进行Fork,搭建基本环境 2.用户需求 ①基本功能显示在首页 ②能够提交题目并判题,并对 ...

  4. 如何申请免费域名证书,以及在IIS上绑定

    1.前往https://freessl.cn/ 申请域名 证书 2.输入邮箱后,点击创建.文件验证方式 会自动下载一个压缩包,把该压缩包放到所申请的域名首层下.(不要重复创建,需要3,5分钟.最好手动 ...

  5. JavaScript检测数据类型

    JavaScript检测数据类型 标签(空格分隔): JavaScript function valType(value) { return Object.prototype.toString.cal ...

  6. Oracle数据库设计实例-实时生产效率系统数据库设计

    Oracle数据库设计实例-实时生产效率系统数据库设计 引言 1.1 设计前提 某部门经理要求IT部门设计一个流水线实时生产效率系统,用来统计实时的生产量和效率.流水线有数百条,实时间隔为1min. ...

  7. 新浪OAuth网络登录,请求access_token时遇到21323的错误

    按照新浪给出的文档写了,但是遇到错误,总是获取不到token值,也是post方式提交的. 查阅百度资料,发现有网友给出了解决办法,是因为 文档中有这么一句提示: HTTP请求方式:POST 这句话太简 ...

  8. 第四周 day4 python学习笔记

    关于装饰器的更多信息可以参考http://egon09.blog.51cto.com/9161406/1836763 1.装饰器Decorator 装饰器:本质上是函数,(装饰其他函数),就是为其他函 ...

  9. RequireJS进阶-模块的优化及配置的详解

    概述 关于RequireJS已经有很多文章介绍过了.这个工具可以将你的JavaScript代码轻易的分割成苦干个模块(module)并且保持你的代码模块化与易维护性.这样,你将获得一些具有互相依赖关系 ...

  10. Java虚拟机5:常用JVM命令参数

    这里汇总一些平时用到的.看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和 ...