前言
最近想在linux搭建一个lua的socket服务端,发现在centos7上lua没有socket库的支持,所以自己安装一下,为了保持和windows上的开发一直,所以需要把linux上的lua版本替换成和windwos的一直,碰到些许问题,记录以备不时之需
版本信息
- linux-lua-version:5.1.4
- windows-lua-version:5.1.5
- linux-luasocket-version:2.0.2
替换linux lua
- 创建一个新目录
mkdir /var/lua
- 移动到新目录
cd /var/lua
- 下载lua版本
curl -R -O http://www.lua.org/ftp/lua-5.1.5.tar.gz
- 安装lua
tar xf lua-5.1.5.tar.gz
cd lua-5.1.5
make linux test
- 安装readline(make linux失败)
这一步是上一步mask linux有报错再看,博主在make linux有报错,如下所示,这里安装一下readline
yum install -y readline-devel
重新maske linux
lua.c:82:31: error: readline/readline.h: No such file or directory
lua.c:83:30: error: readline/history.h: No such file or directory
lua.c: In function ‘pushline’:
lua.c:312: warning: implicit declaration of function ‘readline’
lua.c:312: warning: assignment makes pointer from integer without a cast
lua.c: In function ‘addreturn’:
lua.c:339: warning: implicit declaration of function ‘add_history’
- 删除原来的lua
rm -rf /usr/bin/lua
- 建立一个软连接指向新的lua
ln -s /var/lua/lua-5.1.5/src/lua /usr/bin/lua
安装luasocket
- 新建一个目录
mkdir /var/luasocket
- 切换工作目录
cd /var/luasocket
- 下载luasocket
wget http://files.luaforge.net/releases/luasocket/luasocket/luasocket-2.0.2/luasocket-2.0.2.tar.gz
- 解压缩
tar -xzvf luasocket-2.0.2.tar.gz
- 修改config文件
cd luasocket-2.0.2
vim config
LUAINC=-I/var/lua/lua-5.1.5/src
路径是自己lua文件下src,目的是安装的时候能够找到lua.h文件
INSTALL_TOP_SHARE=/usr/share/lua/5.1
INSTALL_TOP_LIB=/usr/lib64/lua/5.1
上边两行改成默认lua的核心库的位置
- 安装
make & make install
输出如下所示就是成功了
[root@VM-8-15-centos luasocket-2.0.2]# make
cd src; make all
make[1]: Entering directory `/var/luasocket/luasocket-2.0.2/src'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/var/luasocket/luasocket-2.0.2/src'
[root@VM-8-15-centos luasocket-2.0.2]# make install
cd src; make all
make[1]: Entering directory `/var/luasocket/luasocket-2.0.2/src'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/var/luasocket/luasocket-2.0.2/src'
cd src; mkdir -p /usr/share/lua/5.1
cd src; cp ltn12.lua socket.lua mime.lua /usr/share/lua/5.1
cd src; mkdir -p /usr/share/lua/5.1/socket
cd src; cp http.lua url.lua tp.lua ftp.lua smtp.lua /usr/share/lua/5.1/socket
cd src; mkdir -p /usr/lib64/lua/5.1/socket
cd src; cp socket.so.2.0.2 /usr/lib64/lua/5.1/socket/core.so
#cd src; mkdir -p /usr/share/lua/5.1/mime
#cd src; cp /usr/share/lua/5.1/mime
cd src; mkdir -p /usr/lib64/lua/5.1/mime
cd src; cp mime.so.1.0.2 /usr/lib64/lua/5.1/mime/core.so
- 问题报错
在require(“socket”)的时候依然找不到socket,报错如下
> require("socket")
stdin:1: module 'socket' not found:
no field package.preload['socket']
no file './socket.lua'
no file '/usr/local/share/lua/5.1/socket.lua'
no file '/usr/local/share/lua/5.1/socket/init.lua'
no file '/usr/local/lib/lua/5.1/socket.lua'
no file '/usr/local/lib/lua/5.1/socket/init.lua'
no file './socket.so'
no file '/usr/local/lib/lua/5.1/socket.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'require'
stdin:1: in main chunk
[C]: ?
从报错发现,lua找的usr/local/lib/lua/5.1和usr/local/share/lua/5.1的路径,这个和我们刚才安装luasocket的路径不一样,luasocket的路径是usr/lib/lua/5.1和usr/share/lua/5.1,我们把安装好的东西移过去就好了
mv lib/lua local/lib/lua
mv share/lua local/share/lua
推送
Github:https://github.com/KingSun5
结语
希望看到最后的同学有所收获,若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。
QQ交流群:806091680(Chinar)
该群为CSDN博主Chinar所创,推荐一下!我也在群里!
本文属于原创文章,转载请著名作者出处并置顶!!