2012-10-03 119 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