“要求”不适用于嵌入式lua

时间:2014-04-04 22:42:44

标签: lua lua-5.2

在此代码中我加载并运行test.lua文件

int main (){
    L = luaL_newstate();
    luaL_openlibs(L);
    luaL_dofile(L, "test.lua");
    lua_close(L);
    return 0;
}

我的test.lua文件内容

print ("s1");
r=require 'simple';
print ("s2");

之前安装了simple模块 运行./lua_c

;输出仅为:s1

但运行时lua test.lua;输出

s1
s2

r in not nil

1 个答案:

答案 0 :(得分:1)

simple无法加载或解析或执行。要查找问题,请使用luaL_loadfile代替luaL_dofile并检查返回值。如果非零,则存在加载错误,您可以弹出Lua堆栈并打印。如果没有错误,请执行lua_pcall(L, 0, LUA_MULTRET, 0))运行loadfile创建的chuck,然后再次检查返回代码是否有错误,弹出堆栈并打印。这可能是这样的:

int main ()
{
    L = luaL_newstate();
    luaL_openlibs(L);

    if (luaL_loadfile(L, "test.lua"))
    {
         cout << "Error: " << lua_tostring(L, -1) << endl;
    }
    else if (lua_pcall(L, 0, LUA_MULTRET, 0))
    {
         cout << "Error: " << lua_tostring(L, -1) << endl;
    }
    else
    {
         // call successful
    }

    lua_close(L);
    return 0;
}

更新:既然您从错误消息中得知simple.so具有未定义的符号:lua_gettop,您就知道存在链接错误。也许simple.so没有与lua51.so相关联,但由于它的工作原理是链接到lua lib的lua.exe,因此它可以在你的应用程序中运行,它肯定也与它相关联。另一种可能性是lua.exe是静态链接但很简单。所以没有链接。验证simple.so是否链接到lua51.so,并且可以找到它链接到的lib,例如通过LD_LIBRARY_PATH。验证lua.exe链接到相同的.so。