在此代码中我加载并运行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
答案 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。