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

猜你喜欢

转载自blog.csdn.net/qq_35624156/article/details/86693317