在cocos2dx 中使用Cjson解析json数据

为什么要用cjson呢,应为cjson得解析速度使用c,速度更快,比起2dx封装的简单的lua来讲要快很多

以下问题操作都来自于 mac os , xcode


一 :默认cocos2dx 是没有引入cjson,但是本地已经有了cjson库文件

这里写图片描述

二: 记住导入工程时选择对应的target,博主我当时选择了“libcocos2dlua mac” 导致调试ios时一直读不到文件,应该选择“libcocos2dlua iOS”

这里写图片描述

三:默认携带的lua_cjson.h文件中包含了两个函数

intluaopen_cjson(lua_State *l);
int luaopen_cjson_safe(lua_State *l);

  • 在AppDelegate中调用这两个函数
  • 此时编译程序,会报错,大概就是编译器找不到luaopen_cjson
  • 此时可以发现是缺少宏命令extern所导致
    • 解决办法如下:
    • 添加宏命令 #if __cplusplus #endif
    • 添加引用全局变量 extern “C” 指定此段使用C编译器
        #if __cplusplus
          extern"C" {
        #endif

            #include "lauxlib.h"

            void  LUA_EXTENSIONS_DLL
            luaopen_lua_extensions(lua_State *L);

      #if __cplusplus
            }
      #endif

四:第三部解决之后,可以编译通过,但是遇到下一个问题:

local cjson = require(“cjson”)
导入cjson之后程序会报错, module not found ‘cjson’

应为cocos得lua注册风格有两部需要注意,这个在luaopen_cjson中并没有被封装,所以得自己加
ps. 这里其实可以完全借鉴Luasocket.c的lua注册方式

  • step1. 需要添加全局module’package’
  • step2. 获取全局_G
  • step3. 需要添加变量 ‘preload’
  • step4. 此时调用对应的luaopen_cjson

如图这里写图片描述

五:此时编译如下例子成功

这里写图片描述

总结:解决此库编译问题,主要是注意Lua环境变量,是否全局,是否load,以及C端注册绑定的地方是否有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值