luasocket 2.0.2 only supporte Lua 5.1 but not 5.2

在环境Lua 5.2.3中安装luasocket 2.0.2时遇到如下错误 : 

[root@db-172-16-3-33 luasocket-2.0.2]# make
cd src; make all
make[1]: Entering directory `/opt/soft_bak/luasocket-2.0.2/src'
gcc  -DLUASOCKET_DEBUG  -pedantic -Wall -O2 -fpic   -c -o luasocket.o luasocket.c
In file included from luasocket.c:31:
auxiliar.h:38: error: expected declaration specifiers or ‘...’ before ‘luaL_reg’
luasocket.c:50: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mod’
luasocket.c:60: warning: ISO C does not allow extra ‘;’ outside of a function
luasocket.c:62: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘func’
luasocket.c:66: warning: ISO C does not allow extra ‘;’ outside of a function
luasocket.c: In function ‘base_open’:
luasocket.c:92: warning: implicit declaration of function ‘luaL_openlib’
luasocket.c:92: error: ‘func’ undeclared (first use in this function)
luasocket.c:92: error: (Each undeclared identifier is reported only once
luasocket.c:92: error: for each function it appears in.)
luasocket.c: In function ‘luaopen_socket_core’:
luasocket.c:116: error: ‘mod’ undeclared (first use in this function)
make[1]: *** [luasocket.o] Error 1
make[1]: Leaving directory `/opt/soft_bak/luasocket-2.0.2/src'
make: *** [all] Error 2

经过查询, 发现luasocket 2.0.2只支持Lua 5.1, 原因是用到了5.1中的一个数据类型, 但是5.2里面没有.

pkulchenko commented a year ago

In file included from luasocket.c:31:0:
auxiliar.h:38:61: error: unknown type name ‘luaL_reg’

@masterkorp, this looks like it may still be using Lua 5.2 includes. From auxiliar.h:

#include "lauxlib.h"

int auxiliar_open(lua_State *L);
void auxiliar_newclass(lua_State *L, const char *classname, luaL_reg *func);

Lua 5.1 lauxlib.h includes defined for luaL_reg (line 170):

#define luaL_reg    luaL_Reg

but Lua 5.2 lauxlib.h doesn't include that, which would explain why the type is unknown.

如果一定要在5.2上使用luasocket, 可以去github下最新版本

https://github.com/diegonehab/luasocket/

make的时候也需要注意, 通过luasocket的makefile可以看到, 如果要支持5.2的话, 需要使用both安装.

# Targets:
#   install            install system independent support
#   install-unix           also install unix-only support
#   install-both       install for both lua5.1 and lua5.2
#   install-both-unix      also install unix-only
#   print                  print the build settings

简明步骤 : 

# git clone  https://github.com/diegonehab/luasocket
# cd luasocket
# make
# make install-both-unix
[root@db-172-16-3-33 luasocket]# lua
Lua 5.2.3  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> require ("socket")

打印socket包含的对象 : 

function print_tbl(v_s)
  if type(v_s) == "table" then
    print(v_s, "contents:-----------------------------------------------")
    for k,v in pairs(v_s) do
      if type(v_s[k]) == "table"
      then
        print(v_s,k,v)
        print_tbl(v_s[k])
      else
        print(v_s,k,v)
      end
    end
  else
    error("please enter a table variable.")
  end
end

> s = require("socket")

> print_tbl(s)
table: 0x15b9410        contents:-----------------------------------------------
table: 0x15b9410        dns     table: 0x15b95c0
table: 0x15b95c0        contents:-----------------------------------------------
table: 0x15b95c0        getaddrinfo     function: 0x7f5d2c2ded80
table: 0x15b95c0        gethostname     function: 0x7f5d2c2deb20
table: 0x15b95c0        toip    function: 0x7f5d2c2df1d0
table: 0x15b95c0        getnameinfo     function: 0x7f5d2c2deba0
table: 0x15b95c0        tohostname      function: 0x7f5d2c2df140
table: 0x15b9410        __unload        function: 0x7f5d2c2dc510
table: 0x15b9410        choose  function: 0x15bb6b0
table: 0x15b9410        sink    function: 0x15badc0
table: 0x15b9410        sourcet table: 0x15bb6e0
table: 0x15bb6e0        contents:-----------------------------------------------
table: 0x15bb6e0        default function: 0x15baee0
table: 0x15bb6e0        by-length       function: 0x15bae00
table: 0x15bb6e0        until-closed    function: 0x15baee0
table: 0x15b9410        skip    function: 0x7f5d2c2dc520
table: 0x15b9410        _VERSION        LuaSocket 3.0-rc1
table: 0x15b9410        source  function: 0x15bafd0
table: 0x15b9410        sleep   function: 0x7f5d2c2dc6b0
table: 0x15b9410        udp     function: 0x7f5d2c2e1450
table: 0x15b9410        BLOCKSIZE       2048
table: 0x15b9410        tcp     function: 0x7f5d2c2e0b30
table: 0x15b9410        _SETSIZE        1024
table: 0x15b9410        sinkt   table: 0x15bb730
table: 0x15bb730        contents:-----------------------------------------------
table: 0x15bb730        default function: 0x15bb7e0
table: 0x15bb730        close-when-done function: 0x15bb780
table: 0x15bb730        keep-open       function: 0x15bb7e0
table: 0x15b9410        newtry  function: 0x7f5d2c2dfe70
table: 0x15b9410        select  function: 0x7f5d2c2e0360
table: 0x15b9410        try     function: 0x15bbeb0
table: 0x15b9410        bind    function: 0x15b94c0
table: 0x15b9410        connect6        function: 0x15bbe50
table: 0x15b9410        protect function: 0x7f5d2c2dfda0
table: 0x15b9410        gettime function: 0x7f5d2c2dc7b0
table: 0x15b9410        connect4        function: 0x15b9640
table: 0x15b9410        connect function: 0x7f5d2c2e0780
table: 0x15b9410        udp6    function: 0x7f5d2c2e1440
table: 0x15b9410        tcp6    function: 0x7f5d2c2e0b20
> print_tbl(s.dns.getnameinfo('127.0.0.1'))
table: 0x15ca660        contents:-----------------------------------------------
table: 0x15ca660        1       localhost
> print_tbl(s.dns.getnameinfo('192.168.1.1'))
table: 0x15b3cb0        contents:-----------------------------------------------
table: 0x15b3cb0        1       192.168.1.1
> print_tbl(s.dns.getnameinfo('202.101.172.35'))
table: 0x15c9340        contents:-----------------------------------------------
table: 0x15c9340        1       hangzhou.zjhzptt.net.cn

[参考]
1. https://github.com/diegonehab/luasocket/

2. http://luaforge.net/projects/

3. http://lua-users.org/wiki/LibrariesAndBindings

时间: 2024-12-31 19:30:02

luasocket 2.0.2 only supporte Lua 5.1 but not 5.2的相关文章

Lua OS 0.11.1发布 Lua's封装工具

Lua OS 0.11.1这个版本增加了自动化系统调整,获得Windows密钥功能和笔记本触摸板的功能. Lua是一个简单有趣的脚本语言.Lua OS是一个以Lua's封装为基础来完成OS的功能,如系统休眠,登录,重启,移动,流动性和灵活的安全http://www.aliyun.com/zixun/aggregation/6926.html">管理能力. 下载地址:http://luaos.net/download/files/luaos-0.11.1.zip

Lua CJSON 1.0.3发布 JSON解析和编码工具

Lua CJSON是一款为Lua提供快速的JSON解析和编码工具.其特点是:比最快的Lua库的速度还要快10至20倍,全力支持JSON UTF-8,除了Lua/LuaJIT以外的都没有依赖性,易于安装.该软件已经通过Linux.FreeBSD.OSX and Windows平台测试,用户可以放心使用. Lua CJSON 1.0.3版本修正了一个对象的编码错误. 软件信息:http://www.kyne.com.au/~mark/software/lua-cjson.php 下载地址: http

Lua OS 0.13发布 Lua's封装工具

Lua OS 0.13此版本Lua OS操作系统现在支持英语和德语的键盘,并在许多领域提供屏幕两种http://www.aliyun.com/zixun/aggregation/38985.html">语言文字.现在,经常被请求的软件包已经包含在CD中. Lua OS操作系统现在可以明确地被改造成一个单用户或一个真正的远程访问多用户操作系统.添加一个更全面综合手册. Lua是一个简单有趣的脚本语言.Lua OS是一个以Lua's封装为基础来完成OS的功能,如系统休眠,登录,重启,移动,流动

使用Lua和OpenResty搭建验证码服务器

Lua下有个Lua-GD图形库,通过简单的Lua语句就能控制.生成图片. 环境说明: 操作系统:RHEL6.4 RHEL系统默认已安装RPM包的Lua-5.1.4,但其只具有Lua基本功能,不提供 lua.h 等,但 Lua-GD 编译需要用到 lua.h,故 Lua 需要编译安装. Lua-GD 版本号格式为X.Y.XrW,其中X.Y.Z代表gd版本,W代表效力版本,所以 lua-gd 版本:lua-gd-2.0.33r2 相对应 gd 版本为:gd-2.0.33,须注意保持一致. 因生成gi

Lua 数据库访问(转)

本文主要为大家介绍 Lua 数据库的操作库:LuaSQL.他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL. 本文为大家介绍MySQL的数据库连接. LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装你需要的数据库驱动. LuaRocks 安装方法: $ wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz $ tar zxpf luarocks-2.2.

Lua和Nginx结合使用的超级指南

  这篇文章主要介绍了Lua和Nginx结合使用的指南,从数据转换到API等各个方面均有涉及,超推荐!需要的朋友可以参考下 Nginx作为API代理 有很多原因说明你为什使用nginx作为API代理.首先因为他是开源的;其次,Nginx有大量的安装基础,他背后有一个强大的社区支持,在性能方面也表现的非常出色.对于我们来说,这是显而易见的,如果开源软件有相同的解决方案我们为啥还要用那些私有的软件. 另外一个极大的优势就是nginx对lua的支持,nginx+lua是一个非常好的组合,它允许使用一个

《Lua游戏AI开发指南》一2.10 智能体的属性

2.10 智能体的属性 现在已经可以创建智能体了,我们回过头来看看智能体都有哪些属性,以及它们的意义是什么. 2.10.1 朝向 每当需要返回智能体的朝向时,最简单的方法是使用前向向量,它通常代表了智能体的运动方向.朝向的左向量和上向量也可以访问到.每当你需要改变智能体的方向时,只需简单地设置它的前向向量. 1.前向轴 为了获取和设置智能体的前向向量,我们可以使用内建的GetForward和SetForward辅助函数. local forwardVector = agent:GetForwar

Lua precompiled code

使用luac或者string.dump函数可以将Lua脚本编译成二进制格式, 编译后的代码同样可以使用lua运行. 预编译代码(二进制格式)加载速度比文本快, 但是文件可能更大, 同时二进制格式可以对代码起到一定的保护作用, 因为文本很容易暴露或被修改. # vi test.lua local a=1 function f() a=a+1 return a end for i=1,20 do print(f()) end 使用luac把脚本转换成二进制编码 # luac -o ./test.lc

使用varnish + nginx + lua搭建网站的降级系统

前言 通常一个网站数据库挂掉后,后果将是非常严重的.基本上整个网站基本不可用了.对于一些网站来说,当数据库挂掉后,如果能提供基本的浏览服务,也是不错的.本文将尝试使用varnish + nginx + lua 搭建网站降级系统来实现整个目标. 降级目标 降级方案的目标是,当网站出现致命故障时(如出现500错误,不能提供服务),可以把缓存的页面数据展现给用户.从而提供基本的浏览服务. 1.只提供基本的浏览服务 2.浏览的数据都是非登录状态下的数据 3.支持手动和自动降级.自动降级是当后端返回500