Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 567|回复: 0

luajit 64位 for cocos2dx 编译ios解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-18 13:19:55 | 显示全部楼层 |阅读模式

     

    最近luajit发布了64位beta版,由于appstore上线必须是64位的应用,而且我的游戏项目用到lua脚本,所以必须要用到64位的luajit来编译lua脚本。

    方法如下:

    在luajit官网下载luajit源码:

    http://luajit.org

    解压后,需要通过在luajit的文件夹上层目录,打开终端编译,编译方法如下命令:

    LUAJIT=./luajit-2.1.0-beta2

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

    IOSVER=iPhoneOS9.3.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 ./

     

     

    注意的是,以上的IOSVER变量必须设置为当前系统的ios sdk的版本号。

     

    编译好后,在luajit文件夹下会新增了build文件夹,里面有三个库和Headers文件夹,Headers里面

    存放的是项目必须包含的头文件,另外还有三个库.a库:

    libluajit64bit.a:是arm 64位的库,用在ios 64位设备上,

    libluajitA7.a:是arm 32位的库,用在ios 32位设备上,

    libluajitx86_64:是x86指令的库,用在pc和iOS模拟器上。

     

    将对应平台的库和所有头文件导入项目中用于解析luajit的字节码。

     

    由于iphone5s以上虚拟机需要x86_64支持,luajit为了支持此模式需要在other linker flags中增加参数(注意,只需要对模拟器添加参数,针对ios不能添加,否则apple不会通过审核):

    -pagezero_size 10000 -image_base 100000000

     

    因为arm64使用了最新的lj_gc64与lj_fr2的c库,必须通过gc64库编译lua脚本,所以,我们需要在真机上编译,或者在

    luajit的源码中,找到lj_arch.h文件,在文件开始地方加入宏:

    #define LUAJIT_ENABLE_GC64   ,让编译的时候使用gc64位库编译。

     

     

    以下的代码是我在廖大写的编译方法,其实就是将lua脚本放在source文件夹下,

    通过lua的string.dump将脚本转成对应平台的字节码,然后导出编译后的

    字节码,具体实现看编译项目的main.lua, 我将编译项目放到百度云盘(http://pan.baidu.com/s/1dFCwoO5),方便下载,

    项目编译可以在ios模拟器或者真机上编译,如果真机没有越狱,可以通过ftp将编译后

    的lua脚本发到ftp服务器上,同样更方便的可以通过在ios模拟器上编译, 然后在可写路径找到编译后的脚本,编译后将脚本拷到

    自己的项目中就能完美运行。

     

    注意的是,如果函数main.lua不能通过

    executeScriptFile方法执行,必须通过require来执行main.lua

     

     

    转载请注明出处,from 博客园 HemJohn

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-10 10:03 , Processed in 0.064114 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表