因爲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 下替換原來的就好了,打包上傳吧