每当我运行我的应用程序时,我遇到此错误.错误是:
loop or previous error loading module 'socket'.
导致此错误的代码是:
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);
}
Run Code Online (Sandbox Code Playgroud)
以下是我编译代码的方法:
gcc -Wall -o terminal attacker.c -I/usr/include/lua5.1 -llua5.1 -lm
在编译期间我是否遗漏了任何开关,或者我错过了库?
注意:编译器不会抛出任何错误并干净地编译.在其他不包含C的Lua应用程序中,我没有任何问题require("socket").
谢谢
luaL_loadfile(L, "socket.lua")
Run Code Online (Sandbox Code Playgroud)
这是可疑的.非常怀疑.
使用标准的Lua加载器,当你发出时require("MODULE_NAME"),它会查找的第一件事(在检查是否MODULE_NAME已经加载之后)将是"MODULE_NAME.lua".在当前目录中.当然存在.它被称为socket.lua,你加载并试图执行的文件.因此,它将尝试加载socket.lua为模块.
而且,既然socket.lua有了require("socket")它,它将再次加载自己.然后再次.然后再次.
好吧,它不会因为Lua的包加载器系统足够智能来检测循环并发出错误.这正是它所做的.
因此,MODULE_NAME.lua如果您确实需要具有该名称的模块,请不要命名文件.
| 归档时间: |
|
| 查看次数: |
6228 次 |
| 最近记录: |