標籤:
蘋果要求老的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.1DEVDIR=`xcode-select -print-path`/PlatformsIOSVER=iPhoneOS8.1.sdkSIMVER=iPhoneSimulator.sdkIOSDIR=$DEVDIR/iPhoneOS.platform/DeveloperSIMDIR=$DEVDIR/iPhoneSimulator.platform/DeveloperIOSBIN=$DEVDIR/../usr/bin/SIMBIN=$SIMDIR/usr/bin/BUILD_DIR=$LUAJIT/buildrm -rf $BUILD_DIRmkdir -p $BUILD_DIRrm *.a 1>/dev/null 2>/dev/nullecho =================================================echo ARMV7 ArchitectureISDKF="-arch armv7 -isysroot $IOSDIR/SDKs/$IOSVER"make -j -C $LUAJIT HOST_CC="gcc -m32 " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=armv7 TARGET_SYS=iOS cleanmake -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.aecho =================================================echo ARM64 ArchitectureISDKF="-arch arm64 -isysroot $IOSDIR/SDKs/$IOSVER"make -j -C $LUAJIT HOST_CC="gcc " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS cleanmake -j -C $LUAJIT HOST_CC="gcc " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=arm64 TARGET_SYS=iOS mv $LUAJIT/src/libluajit.a $BUILD_DIR/libluajit64bit.aecho =================================================echo IOS Simulator ArchitectureISDKF="-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 cleanmake -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.alibtool -o $BUILD_DIR/libluajit21.a $BUILD_DIR/*.a 2> /dev/nullmkdir -p $BUILD_DIR/Headerscp $LUAJIT/src/lua.h $BUILD_DIR/Headerscp $LUAJIT/src/lauxlib.h $BUILD_DIR/Headerscp $LUAJIT/src/lualib.h $BUILD_DIR/Headerscp $LUAJIT/src/luajit.h $BUILD_DIR/Headerscp $LUAJIT/src/lua.hpp $BUILD_DIR/Headerscp $LUAJIT/src/luaconf.h $BUILD_DIR/Headersmv $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下編譯
luajit2.1 iOS編譯64bit以及通用庫