问题背景

1、在envoy中采用lua脚本执行业务逻辑,需要解析json字符串
2、采用lua-cjson进行解析操作

问题点

1、需要在x86、arm两种环境中进行执行,因此该cjson.so需要在两种环境下分别进行编译。在lua-cjson进行编译的时候,需要依赖lua基础环境。在x86环境中,采用lua-jit作为lua环境进行的安装。
版本分别为:
luajit-2.0.5
lua-cjson-2.1.0
参考:lua-jit、lua-cjson编译打包

但是在arm环境中,lua-jit仅仅在后续版本中提供了简单的支持,这时侯编译lua-cjson需要的依赖都缺失了。

解决

采用lua作为基础环境进行安装。

1、需要采用lua5.1,5.3版本会报错

lua下载地址

2020/02/19 06:59:52 [error] 29524#29524: *1 lua entry thread aborted: runtime error: error loading module 'cjson' from file '/usr/local/lib/lua/5.1/cjson.so':
        /usr/local/lib/lua/5.1/cjson.so: undefined symbol: lua_rotate
stack traceback:
coroutine 0:
        [C]: in function 'require'

原因应该是envoy运行环境中的lua版本较低,不支持函数require。

2、具体操作

将参考《Lua:开源库 lua-cjson 安装及使用》生成的json.so拷贝到系统中,可以看到在5.1版本的lua中会去5.1的位置找该so。

参考:
undefined symbol: lua_rotate
Lua:开源库 lua-cjson 安装及使用

GitHub 加速计划 / cj / cJSON
10.45 K
3.16 K
下载
Ultralightweight JSON parser in ANSI C
最近提交(Master分支:2 个月前 )
424ce4ce This reverts commit 5b502cdbfb21fbe5f6cf9ffbd2b96e4281a741e6. Related to #860 4 个月前
32497300 - 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐