luajit2.1 iOS編譯64bit以及通用庫

來源:互聯網
上載者:User

標籤:

蘋果要求老的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以及通用庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.