加载模块(Lua)出错。

每当运行应用程序时,我都会遇到这个错误,导致我遇到了麻烦。 错误是:loop or previous error loading module 'socket'

导致此错误的代码是:socket = require("socket")

此错误发生在第一个lua_pcall期间。这是调用该功能的函数:

void startTerminal(int port,char host [80])
{
    lua_State * L = lua_open();

    /*打开Lua库*/
    luaL_openlibs(L);

    /*选择将运行的lua文件*/
    if(luaL_loadfile(L,“socket.lua”)){
        lfatal(L,“luaL_loadfile()failed”);
    }

    /*启动lua文件*/
    if(lua_pcall(L,000)){
        lfatal(L,“lua_pcall()”);
    }

    /*获取连接函数*/
    lua_getglobal(L,“connect”);

    if(!lua_isfunction(L,-1)){
        lua_pop(L,1);
        lfatal(L,“lua_isfunction()failed”);
    }

    /*设置参数*/
    lua_pushnumber(L,port);
    lua_pushstring(L,host);

    /*调用lua函数*/
    if(lua_pcall(L,22,0)){
        lfatal(L,“lua_pcall()failed”);
    }

    /*打印结果*/
    printf(“%s”,lua_tostring(L,-1));
    printf(“%s”,lua_tostring(L,-1));

    lua_close(L);
}

我是如何编译代码:

gcc -Wall -o terminal attacker.c -I/usr/include/lua5.1 -llua5.1 - lm

我是否在编译期间缺少任何开关或缺少库?

注意: 编译器不会抛出任何错误并且编译干净。 在不包含C的其他Lua应用程序中,我没有require(“socket”)的任何问题。

谢谢

点赞
用户734069
用户734069
luaL_loadfile(L, "socket.lua")

这很可疑。非常可疑。

使用标准的 Lua 加载器,当你执行 require("MODULE_NAME") 时,它首先查找的是“MODULE_NAME.lua”。在当前目录. 这当然存在。它叫做 socket.lua,就是你要加载并且尝试执行的那个文件。因此,它会尝试将 socket.lua 作为模块进行加载。

由于 socket.lua 中有 require("socket"),所以会再次加载它自己。一遍又一遍。

好吧,它不会这样做,因为 Lua 的包加载器系统足够聪明,可以检测到循环并发出错误。这就是它所做的。

因此,如果你实际上要使用具有该名称的模块,请不要将文件命名为 MODULE_NAME.lua

2012-10-03 00:31:24