0%

LuaJit的64位编译问题

很早以前cocos2dx项目中使用luajit,不支持64位;现在升级到cocos2dx4.0以后同样遇到这个问题,好记性不如记录下来。

  1. 问题描述:
    使用cocos luacompile编译lua文件时,使用—bytecode-64bit选项时,默认编译的字节码,在cocos2dx引擎中却报”luajit,error: syntax error during pre-compilation”错误。

  2. 解决步骤
    cocos2dx的问题列表中,有用户反映是cocos luacompile中的luacompile插件版本问题。所以我尝试下载源码重新编译。
    下载源码: https://github.com/cocos2d/cocos2d-x-3rd-party-libs-src.git
    解压源码后

    • 2.1 代码编译报错,需要修改lib_os.c,ios中不支持system函数
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      #if LJ_TARGET_IOS
      #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;
      }
      #endif
    • 2.2 system函数更改为
      1
      2
      3
      4
      5
      #if !LJ_TARGET_IOS
      int stat = system(cmd);
      #else
      int stat = nftw(cmd, unlink_cb, 64, FTW_DEPTH | FTW_PHYS);
      #endif
    • 2.3 重新编译

      1
      2
      cd build
      ./build.sh -p=ios --libs=luajit --arch=armv7,arm64

      同时编译luajit的mac版本或者windows版本放入到cocos2d_console的plugins/plugin_luacompile/bin/64bit目录下

  3. 验证
    使用cocos luacompile ——bytecode-64bit 编译lua脚本
    运行cocos2dx项目能否解析字节码成功。