Lua 5.1.5編譯安裝luasocket2.0.x時發現的問題及「粗暴」的解決辦法

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

雖然內網安裝的時候很苦逼,可是沒出什麼奇怪的問題,很順利的就裝完了。可今天往線上部署的時候就遇到奇怪的問題了。 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包上。刪了各類文件,從新編譯,錯誤依舊。 socket

對比測試機和正式機的軟件環境
nginx……版本不同
lua……版本不同 oop

有沒有多是lua版本的問題?因爲編譯luasocket用的是LuaJIT2.0.2的頭文件,因此編譯過程當中沒報錯。
怒換lua5.1.4……編譯仍是沒報錯,可是問題仍是同樣
換lua5.1.5……編譯終於報錯了,可是編譯成功,問題還沒變…… 測試

「哎我這個暴脾氣……%(@!#&%(」(此處省略1024字) lua

既然是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的頭文件編譯,雖然也報錯,但編譯經過,問題解決…… 部署

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

相關文章
相關標籤/搜索