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 下替换原来的就好了,打包上传吧

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值