• linux上lua版本的替换和luasocket的安装和使用


    前言

    最近想在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’
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 删除原来的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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 问题报错

    在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]: ?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    从报错发现,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所创,推荐一下!我也在群里!
    本文属于原创文章,转载请著名作者出处并置顶!!

  • 相关阅读:
    理论第六课——二分查找函数
    【设计模式】封装、继承、抽象、多态
    C#之性能优化
    深度清洁,清洗小物件的好助手——希亦CG超声波清洗机体验
    基于Django与深度学习的股票预测系统 计算机竞赛
    【 C++ 】unordered_map和unordered_set的介绍和使用
    OpManager-系统性能监控工具
    云计算存储虚拟化技术
    springboot+redis
    ubuntu中,执行arm-linux-gcc 出现 命令未找到的解决办法,本人亲测有效,可以尝试!!!!!
  • 原文地址:https://blog.csdn.net/Mr_Sun88/article/details/126032170