2012-10-03 85 views
3

我遇到了这个错误,我每次运行我的应用程序时都会收到错误。错误是: loop or previous error loading module 'socket'加载模块(Lua)时出错

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

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

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

    /* Open Lua Library */ 
    luaL_openlibs(L); 

    /* Choose the lua file that will run */ 
    if(luaL_loadfile(L, "socket.lua")) { 
     lfatal(L, "luaL_loadfile() failed"); 
    } 

    /* Start lua file */ 
    if(lua_pcall(L, 0, 0, 0)) { 
     lfatal(L, "lua_pcall()"); 
    } 

    /* Get connect function */ 
    lua_getglobal(L, "connect"); 

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

    /* Setup arguments */ 
    lua_pushnumber(L, port); 
    lua_pushstring(L, host); 

    /* Call the lua function */ 
    if(lua_pcall(L, 2, 2, 0)) { 
     lfatal(L, "lua_pcall() failed"); 
    } 

    /* Print out results */ 
    printf("%s", lua_tostring(L, -1)); 
    printf("%s", lua_tostring(L, -1)); 

    lua_close(L); 
} 

这里是我正在编译代码:

​​

我是不是编译过程中丢失任何开关或我错过库?

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

感谢

回答

5
luaL_loadfile(L, "socket.lua") 

这是犯罪嫌疑人。非常可疑。

使用标准的Lua装载机时,当您发出require("MODULE_NAME")时,首先查找的内容(在检查MODULE_NAME是否已加载后)将为“MODULE_NAME.lua”。 在当前目录。当然存在。它被称为socket.lua,这是你加载并正在尝试执行的文件。因此,它会尝试将socket.lua作为模块加载。

而且由于socket.lua中有require("socket"),它会自动重新加载。然后再次。然后再次。

好吧,这不会因为Lua的包装加载程序系统足够智能以检测循环并发出错误。这正是它所做的。

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

+0

非常感谢。我没有意识到发生了。 – Koralarts