cocos2d-x 3.X 編譯luajit在mac ios下

因爲appstore禁止了dlopen,dlsym等可以遠程下載腳本的函數

所以需要刪除luajit中的兩函數的使用

晚上也沒有現成的,github中cocos2d-x項目下都是編譯完的,

去官網下載

 http://luajit.org/download.html          2.1.0-beta2

放在桌面上,修改腳本中IOSVER SDK的版本號,可以百度一下怎麼看,我是Xcode9.1,所以是iPhoneOS11.1.SDK

腳本如下:

LUAJIT=./luajit-2.1.0-beta2

DEVDIR=`xcode-select -print-path`/Platforms  

IOSVER=iPhoneOS11.1.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 ./

然後,將下載包解壓在桌面上,或者其他位置,打開終端,cd到安裝包的上層目錄,比如user/mac/desktop/luajit-2.1.0-beta2

那麼就是cd user/mac/desktop

然後將腳本放在user/mac下,千萬不要放在同層目錄!

然後sh user/mac/luajit.sh

發現報錯了,system函數在ios9上已經禁止了,所以需要修改一下,在luajit-2.1.0-beta2/src下搜索system,找到唯一使用後這個函數的地方:

 const char *cmd = luaL_optstring(L, 1, NULL);
  int stat = system(cmd);

修改一下,在函數上面添加

 #include <ftw.h>
    
    int unlink_cb(const char *fpath, const struct stat *sb, int typeflag, struct FTW     *ftwbuf)
    {
            int rv = remove(fpath);
    
            if (rv)
            perror(fpath);
    
            return rv;
    }

在修改ststem這行代碼爲

int stat = nftw(cmd,unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
再次編譯!

執行完畢就可以了,編譯到此結束,下面刪除dlopen和dlsym函數

在lj_arch.h中有這樣一個宏開關#define LJ_TARGET_DLOPEN LJ_TARGET_POSIX

將它修改爲0就行了,再重新編譯就通過了,然後將桌面上的luajit21.a改名爲luajit.a存放到cocos2d-x 目錄下的

external\lua\luajit\prebuilt\ios 下替換原來的就好了,打包上傳吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章