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