luajit2.1 iOS编译64bit以及通用库

原创 2015年02月04日 09:52:27

苹果要求老的app需要在6月份后支持64位,新的app从2.1开始就必须支持64bit。由于我们用了luajit,而luajit2.0.x版本只支持32bit。在2.1版本开始支持64bit了,但目前只是alpha版本。

下面的luajit库编译后支持arm64,armv7和模拟器。即一个库支持64bit编译的所有cpu,不需要针对新老iphone做特殊处理。


下载LuaJit

通过GIT下载Luajit代码
git clone http://repo.or.cz/luajit-2.0.git
进入Luajit下载代码目录签出分支v2.1
git checkout v2.1

编译脚本
在luajit-2.0的上一层目录运行
LUAJIT=./luajit-2.1
DEVDIR=`xcode-select -print-path`/Platforms
IOSVER=iPhoneOS8.1.sdk
SIMVER=iPhoneSimulator.sdk
IOSDIR=$DEVDIR/iPhoneOS.platform/Developer
SIMDIR=$DEVDIR/iPhoneSimulator.platform/Developer
IOSBIN=$DEVDIR/../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=$SIMBIN 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 ../lib/ios


注意在编译模拟器的库时:
ISDKF="-arch x86_64 -isysroot $SIMDIR/SDKs/$SIMVER -miphoneos-version-min=7.0"
上面红色字体部分,该段主要用于编译模拟器的luajit库。由于xcode5.0后的更改,必须用这种方式指定编译为模拟器库,否则默认编译为macos.本人在这里折腾了很久。

集成

将luajit/build目录下的libluajit21.a链接到工程。

由于iphone5s以上虚拟机需要x86_64支持,luajit为了支持此模式需要在other linker flags中增加参数(注意,只需要对模拟器添加参数,针对ios不能添加,否则apple不会通过审核)

-pagezero_size 10000 -image_base 100000000

可能陷阱

1: 目前luajit 2.1只是alpha版本,有没有大的bug不清楚

2:在arm64平台下的luajit的bytecode与早前的bytecode有区别无法直接在mac下编译后在arm64平台使用。它使用了最新的lj_gc64与lj_fr2。所以直接在macos下编译的lua代码不能在ios上运行。需要上传源代码在ios下编译



luajit ios arm64 编译bytecode

1.先做一个比对 lua luajit 32 64 bytecode 执行结果 测试代码  AppEntry.lua  print("Hello Lua Compile") Version.lua p...
  • lovehappy108
  • lovehappy108
  • 2016年02月04日 21:09
  • 3087

luajit 2.1beta2 bytecode windows mac 下32 64编译文件

再也不用担心luajit 64 32编译了 windows 环境 cd luajit\luajitcompile\windows\32 luajit.exe -b test.lua test32...
  • lovehappy108
  • lovehappy108
  • 2016年06月14日 17:09
  • 1526

关于ios下arm64 luajitv2.1编译

系统环境 优山美地 OS X Yosemite  Xcode 6.1.1 下载LuaJit 通过GIT下载Luajit代码 git clone http://repo.or.cz/luajit-2...
  • odiecn
  • odiecn
  • 2015年01月07日 19:52
  • 6427

Windows下LuaJIT的编译和使用,将Lua脚本编译为bytecode

1、下载LuaJIT,download>> 2、编译 开始 –> 程序 –> Microsoft Visual Studio xx –> Visual Studio Tools –> Visual...
  • dugaoda
  • dugaoda
  • 2015年12月29日 09:18
  • 3905

Lua:编译安装LuaJIT,第一个Lua程序

一、下载LuaJIT         文件名:LuaJIT-2.0.2.tar.gz         下载地址(官网):http://luajit.org/download.html         ...
  • kanguolaikanguolaik
  • kanguolaikanguolaik
  • 2015年09月06日 20:32
  • 5970

【Lua】windows下安装和使用LuaJIT步骤

1.准备 1) 下载LuaJIT源代码 2) 确保你的机器上安装了visual studio 2.编译 1) 打开visual studio,依次打开 “工具” >> “visual stud...
  • keep_moving_cqu
  • keep_moving_cqu
  • 2016年05月11日 10:38
  • 1516

关于ios下arm64 luajitv2.1编译(续)

在上一篇中只交代了编译luajit.a文件问题,对于bytecode的问题并没有过多的交代。实际上在arm64平台下的luajit的bytecode与早前的bytecode有区别无法直接在mac下编译...
  • odiecn
  • odiecn
  • 2015年01月10日 14:07
  • 3781

Unity luajit集成

集成ulua到unity后,尝试使用luajit编译字节码。 我们使用的是ngui官方github的分支. (Readme中最近的更新记录是2016-01-24) 其中使用的编译字节码环境如下 lua...
  • MichaelPengCN
  • MichaelPengCN
  • 2016年03月10日 10:24
  • 2944

mac终端安装luajit

从官方下载最新luajit http://luajit.org/download.html cd到luajit目录 执行 sudo make      ...
  • wtuetnsrmh
  • wtuetnsrmh
  • 2014年09月24日 19:50
  • 1867

mac 环境下 LuaJit 执行报错 : unknown luaJIT command or jit.* modules not installed

quick-cocos工程 mac 环境下执行LuaJit 对 lua 打包 zip  出现 : unknown luaJIT command or jit.* modules not instal...
  • sonicera
  • sonicera
  • 2017年05月02日 19:20
  • 1045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:luajit2.1 iOS编译64bit以及通用库
举报原因:
原因补充:

(最多只允许输入30个字)