arm环境打包lua脚本依赖的cjson库

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

问题背景

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.15.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 安装及使用

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6