Lua 5.1.5编译安装luasocket2.0.x时发现的问题及“粗暴”的解决办法

最近往正式的服务器部署nginx+lua+redis的环境。

虽然内网安装的时候很苦逼,但是没出什么奇怪的问题,很顺利的就装完了。可今天往线上部署的时候就遇到奇怪的问题了。

去外网服务器发现nginx+lua的各模块都装好了,心想这可省大事儿了,就差一luasocket的包没装。于是快速的把包编译好,把代码一发布,配好nginx,reload,然后去浏览器F5……尼玛的500了……

查代码……没错误
查错误日志……"/path/to/socket/core.so: undefined symbol: luaL_openlib"
再刷……"loop or previous error loading module 'socket.http'"

问题锁定在luasocket包上。删了各种文件,重新编译,错误依旧。

对比测试机和正式机的软件环境
nginx……版本不一样
lua……版本不一样

有没有可能是lua版本的问题?由于编译luasocket用的是LuaJIT2.0.2的头文件,所以编译过程中没报错。
怒换lua5.1.4……编译还是没报错,但是问题还是一样
换lua5.1.5……编译终于报错了,但是编译成功,问题还没变……

“哎我这个暴脾气……%(@!#&%(”(此处省略1024字)

既然是lua版本的问题,那就找一下luaL_openlib在哪定义的吧。这倒简单,在lauxlib.h里就找到了,定义成了……luaI_openlib……?!哎?I?不是L?5.1.4也这样?但是我注意到前面有一个定义#define luaI_openlib luaL_openlib……

具体的原因也懒得查了,直接简单粗暴的将luasocket里用到luaL_openlib的全改成luaI_openlib,用5.1.5的头文件编译,虽然也报错,但编译通过,问题解决……

等有空了再研究吧……累了……睡了……

你可能感兴趣的:(nginx,socket,lua)