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

苹果要求老的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中增加参数

-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下编译

时间: 2024-07-31 14:01:26

luajit2.1 iOS编译64bit以及通用库的相关文章

ios framework通用库的制作

这篇文章是在史上最完整的iOS DIY framework 详细教程(一)的基础上加以修改 1.新建一个静态库工程: 2:取自己喜欢的名字: 3.删除向导所生成工程中的 Target: 3.删除TestFrameWork对应的工程文件夹: 5:删除bulid 关连项 选择左下角Manager Scheme 选中 Scheme,点击左下角的减号删除: 删除完成后,点击 OK 返回. 5.增加一个新目标.点击 “Add Target”<喎?"http://www.2cto.com/kf/war

iOS——为Xcode编译POCO C++静态库

一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C++ 静态库 1.确定需要编译的版本 要想使POCO C++在iOS的各个平台上运行,那么需要针对各个平台的不同架构进行编译,因此我们需要了解iOS各个平台的架构,主要分为iPhone模拟器.iPhone真机以及运行Xcode电脑本身的架构. (1)iPhone模拟器 目前iPhone模拟器架构分为两

iOS App中 使用 OpenSSL 库

转自:http://blog.csdn.net/kmyhy/article/details/6534067 在你的 iOS App中 使用 OpenSSL 库 ——译自x2on的“Tutorial: iPhone App with compiled OpenSSL 1.0.0a Library” 原文地址:http://www.x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/,本文有少许地方做

在你的 iOS App中 使用 OpenSSL 库

在你的 iOS App中 使用 OpenSSL 库 ——译自x2on的“Tutorial: iPhone App with compiled OpenSSL 1.0.0a Library” 原文地址:http://www.x2on.de/2010/07/13/tutorial-iphone-app-with-compiled-openssl-1-0-0a-library/ ,本文有少许地方做了调整. 1.下载OpenSSL源代码库: http://www.openssl.org/source/

ios 编译openssl支持arm64(转)

最近在编译支付宝 快捷支付(无线) ios 端的时候发现demo不支持arm64.在网上找了下,看到客服说是openssl的库文件不支持arm64,于是自己编译了支持arm64的库文件,发现还是不行,提示原来淘宝的库文件也不支持.问他们客服,缺迟迟不给出解决方案,到后面居然连话都不回了.. 以上都是题外话,现在来看看如何编译支持arm64的openssl吧.我是在mac os 10.9.3,xcode5.1.1下进行编译的. 先下载openssl的源文件 http://www.openssl.o

iOS 编译过程原理(2)

一.前言 <iOS编译过程的原理和应用>文章介绍了 iOS 编译相关基础知识和简单应用,但也很有多问题都没有解释清楚: Clang 和 LLVM 究竟是什么 源文件到机器码的细节 Linker 做了哪些工作 编译顺序如何确定 头文件是什么?XCode 是如何找到头文件的? Clang Module 签名是什么?为什么要签名 为了搞清楚这些问题,我们来挖掘下 XCode 编译 iOS 应用的细节. 二.编译器 把一种编程语言(原始语言)转换为另一种编程语言(目标语言)的程序叫做编译器. 大多数编

iOS开发拓展篇—静态库

iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking (2)闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 二.静态库和动态库 1.静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 2.静态库和动

iOS 编译含C++代码出现ld: symbol(s) not found for architecture i386错误之解决(转载)

最近项目需要搭建自己的IM服务器,在快速配置好Openfire之后,开始研究使用gloox开发XMPP客户端实现通信, 先下载gloox源码,然后./configure,make ,sudo make install,在/usr/local/下找到头文件夹和静态库,加到项目中,然后加入openssl库,编写测试代码,编译,报错:XXX not being for architecture i386,感觉是gloox静态库有问题(排除了网上说的头文件路径缺失.building phases没添加.

ios开发中创建静态库的方法介绍

在进行iOS项目开发时,为了减少项目的编译时间,通常情况下会把项目中的私密内容打包成静态库,或者是把ios项目中变动较少一部分打包成静态库以便提高编译效率,很多iOS初学者对静态库与动态库的区别及创建使用,下面就一起来学习下: (一)iOS静态库.动态库与Framework静态库与动态库的区别: (1)什么是库? 库(Library)直白一点说就是一段编译好的二进制代码,加上头文件就可以供别人使用;(例如: iOS中Objective-C编译下的.h和.m文件,打包静态库后会变为.h和.a文件)