2012-10-03 6 views
3

) 응용 프로그램을 실행할 때마다이 오류가 발생합니다. 오류는 loop or previous error loading module 'socket'입니다.모듈로드 오류 (

이 오류의 원인이되는 코드는 socket = require("socket")입니다.

이 오류는 첫 번째 lua_pcall 중에 발생합니다.

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

내가 컴파일 중에 스위치를 놓치고 또는 내가 라이브러리를 놓친 거지 : 여기

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); 
} 

내가 코드를 컴파일하고 방법은 다음과 같습니다 여기에 호출하는 기능은 무엇입니까?

참고 : 컴파일러는 오류를 throw하지 않고 깨끗하게 컴파일합니다. C를 포함하지 않는 다른 Lua 응용 프로그램에서는 require("socket")과 관련하여 문제가 없습니다.

감사

답변

5
luaL_loadfile(L, "socket.lua") 

이 의심이다. 용의자.

표준 루아 로더를 사용하면 require("MODULE_NAME")을 발행 할 때 가장 먼저 찾아야합니다 (MODULE_NAME이 이미로드되었는지 확인한 후). "MODULE_NAME.lua"가됩니다. 현재 디렉토리에. 확실히 존재합니다. 이 파일은로드하여 실행하려고 시도하는 바로 그 파일 인 socket.lua입니다. 따라서 socket.lua을 모듈로로드하려고합니다.

socket.luarequire("socket")이 있으므로 다시로드됩니다. 그리고 다시. 그리고 다시.

Lua의 패키지 로더 시스템이 루프를 감지하고 오류를 발생시킬만큼 똑똑하기 때문에 그렇지 않습니다. 정확히 무슨 일을했는지.

실제로 그 이름을 가진 모듈을 요구할 경우 파일 이름을 MODULE_NAME.lua으로 지정하지 마십시오.

+0

고마워요. 나는 그것이 일어나고 있다는 것을 깨닫지 못했다. – Koralarts

관련 문제